如何根据几个变量计算出一个值?

时间:2017-05-01 16:41:05

标签: r data.table dplyr calculation

我有一个像这样的数据集(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

我希望得到基于Iso,conc和rep。

的结果growth=OD(time=1)-OD(time=0)

输出如下:

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)]

但我不知道如何在两个逗号之前编写该部分。有人能帮助我吗?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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)]