2017-05-01 63 views
1

我有一個數據集(DF)是這樣的:如何計算基於多個變量的值?

Iso conc. rep time OD 
1 1  1 0  0.2 
1 1.5 2 0  0.2 
1 2  3 0  0.2 
2 1  1 0  0.3 
2 1.5 2 0  0.25 
2 2  3 0  0.3 
1 1  1 1  0.4 
1 1.5 2 1  0.35 
1 2  3 1  0.38 
2 1  1 1  0.4 
2 1.5 2 1  0.45 
2 2  3 1  0.43 

而且我想要得到的結果growth=OD(time=1)-OD(time=0)立足ISO,濃度,和代表。

輸出會是這樣的:

Iso conc. rep time growth 
1 1  1 1  0.2 
1 1.5 2 1  0.15 
1 2  3 1  0.18 
2 1  1 1  0.1 
2 1.5 2 1  0.2 
2 2  3 1  0.13 

我一直在想用data.table計算增長。

DT <- as.data.table(df) 
DT[, , by = .(Iso,conc.,rep,set)] 

但我不知道如何在兩個逗號前面寫下部分。有人能幫助我嗎?

+1

我看不到'time = 2' – mtoto

+0

哎呀,對不起。錯誤的打字。現在糾正它。 '增長= OD(時間= 1)-OD(時間= 0)' – Ziming

回答

1

使用data.table你可以簡單地做:

dt[,.(growth = OD[time==1]-OD[time==0]),.(Iso,conc.,rep)] 
# Iso conc. rep growth 
#1: 1 1.0 1 0.20 
#2: 1 1.5 2 0.15 
#3: 1 2.0 3 0.18 
#4: 2 1.0 1 0.10 
#5: 2 1.5 2 0.20 
#6: 2 2.0 3 0.13 
+0

我太親近了!非常感謝!哈哈;) – Ziming

1

你可以這樣做:

DT [, list(growth = OD[time == 1] - OD[time == 0]), by=.(Iso,conc.,rep)] 

或者,如果你確定只有兩個每組值:

DT [order(time), list(growth = diff(OD), by=.(Iso,conc.,rep)] 
+0

所以你的意思是說,如果我有更多的時間點(例如0,1,2,3 ...),那麼我不能再使用差異了吧? – Ziming

+1

爲了保證順序,可以使用'DT [order(time),...]'作爲第二個。 – Frank

+0

@Frank我應該訂購(OD)還是訂購(時間)? – Ziming