基于来自两个其他因子水平的测量值的组合创建新的因子水平

时间:2017-09-14 16:39:45

标签: r dplyr data.table data-manipulation

我正在对腹部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来完成这个项目并熟悉基本操作,但似乎无法解决这个问题。

1 个答案:

答案 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")查看小插图,因为它们涵盖了这样的怪癖并有助于为语法建立直觉。

相关问题