我正在对腹部CT扫描的不同身体隔室中的自动体积脂肪测量进行分析。对于每位患者的扫描,在连续的椎骨水平进行测量,并且每个患者具有分别测量的多个隔室(皮下和内脏)。之前的研究已经确定了内脏/皮下脂肪测量的比例是特别感兴趣的。
我很难在我的数据集中计算这个比率。在此示例代码中,每位患者有六个条目。每个条目都与椎骨水平的隔室的测量脂肪量相关联。
我想要做的是创建一种新的测量类型 - ' vat / sat' - 这只是三个椎体水平中两个测量值的比率。本质上,我试图为每个患者插入三个新的观察结果,这些观察结果与新的因子水平和作为其他值的操作的值相关联。非常感谢任何帮助。
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来完成这个项目并熟悉基本操作,但似乎无法解决这个问题。
答案 0 :(得分: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")
查看小插图,因为它们涵盖了这样的怪癖并有助于为语法建立直觉。