2017-09-14 80 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")審查護身符,因爲它們涵蓋這樣的怪癖,並有助於建立直覺爲語法。