2017-09-14 83 views
1

我正在做腹部CT扫描中不同身体部位的自动体积测量脂肪测量分析。测量是在连续的椎体水平上对每位患者的扫描进行的,并且每个患者具有分开测量的多个隔室(皮下和内脏)。先前的研究已经确定了特别感兴趣的内脏/皮下脂肪测量的比例。根据两个其他因素水平的测量值组合创建新的因子水平

我在试图在我的数据集中计算这个比率时有困难。在这个示例代码中,每个病人有六个条目。每个入口与椎体水平处的隔室的测量脂肪体积相关联。

我想要做的是创建一个新的测量类型 - '增值/饱和度' - 这只是两个度量在三个椎骨水平的比率。实质上,我试图为每个病人插入三个新的观察值,这些观察值与一个新的因素水平相关联,并且值是其他值的操作。任何帮助是极大的赞赏。

library(data.table) 
data <- data.table(ID = rep(c(1:4),each = 6), value = rnorm(24, 1000, 500), 
        level = rep(c('l1','l2','l3')), 
        measure = rep(c(rep('vat',3),rep('sat',3)),4)) 

编辑:我一直在使用这个项目的data.table和熟悉的基本操作,但似乎无法找出这一个。

+1

谢谢,这工作完美。为什么第二个空白[]?我可以在哪些文档中了解到这一点?我对data.table很新。 – ambroise

回答

1

我会考虑去宽格式,其中它更自然:

res = dcast(data, ID + level ~ measure)[, rat := vat/sat][] 

要返回长,有

melt(res, id=c("ID", "level")) 

[]末需要感谢一个quirk of data.table printing。没有它,当你键入...

> res = dcast(data, ID + level ~ measure)[, rat := vat/sat][] 
> res 
# nothing happens 
> res 
# now it prints 

我不知道,如果它的功能文件中,但你可能要与browseVignettes("data.table")审查护身符,因为它们涵盖这样的怪癖,并有助于建立直觉为语法。