R 如何根据几个变量计算一个值?
我有这样一个数据集(df):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
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