根据来自其他两个因子水平的测量值的组合创建一个新的因子水平

Creating a new factor level based on combination of measurement values from two other factor levels

我正在对腹部 CT 扫描中不同 body 隔室中的自动体积脂肪测量值进行分析。对每个患者的扫描在连续的椎骨水平进行测量,并且每个患者都有多个隔室分别测量(皮下和内脏)。先前的研究已经确定 visceral/subcutaneous 脂肪测量值的比率特别令人感兴趣。

我很难在我的数据集中计算这个比率。在此示例代码中,每位患者有六个条目。每个条目都与椎骨水平隔室的测量脂肪体积相关联。

我想做的是创建一个新的测量类型 - '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 并且熟悉基本操作,但似乎无法弄清楚这一点。

我会考虑使用宽幅面,这样更自然:

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

要回到long,有

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

由于,所以需要最后的[]。没有它,当你输入...

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

我不确定它是否在函数文档中,但您可能想查看 browseVignettes("data.table") 的小插图,因为它们涵盖了这样的怪癖并有助于建立语法直觉。