【问题标题】:Creating a new factor level based on combination of measurement values from two other factor levels根据来自其他两个因子水平的测量值的组合创建新的因子水平
【发布时间】:2017-09-14 16:39:44
【问题描述】:

我正在分析腹部 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 并且熟悉基本操作,但似乎无法弄清楚这一点。

【问题讨论】:

  • 谢谢,效果很好。为什么第二个空白[]?我可以在文档中的哪里了解这一点?我对 data.table 很陌生。

标签: r dplyr data.table data-manipulation


【解决方案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") 查看这些小插曲,因为它们涵盖了此类怪癖并有助于建立对语法的直觉。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-20
    • 2015-07-20
    相关资源
    最近更新 更多