Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何根据几个变量计算一个值?_R_Data.table_Dplyr_Calculation - Fatal编程技术网

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

R 如何根据几个变量计算一个值?,r,data.table,dplyr,calculation,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.3

我有这样一个数据集(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 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
我想得到基于Iso、conc和rep的结果
growth=OD(time=1)-OD(time=0)

输出如下所示:

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

DT使用
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
您可以通过以下方式执行此操作:

DT [, list(growth = OD[time == 1] - OD[time == 0]), by=.(Iso,conc.,rep)]
或者,如果您确定每组中只有两个值:

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

对不起,我看不到时间=2。打字错误。现在就纠正它。”成长=OD(时间=1)-OD(时间=0)“我离得太近了!谢谢!哈哈;)所以你的意思是如果我有更多的时间点(例如0,1,2,3…),那么我就不能再使用diff了,对吗?为了保证顺序,第二个时间点可以使用
DT[order(time),…]
。@Frank我应该点(OD)还是点(time)?对不起,我一开始输入错误,我的意思是
order(time)
。如果您有更多的时间,
diff
将只取相邻值之间的差值(对于1减去0,对于2-1,等等)@ZimingOk!我现在明白了!谢谢@Frank@Patronus