R:计算组子集的平均值
我想计算每个“天”的平均值,但计算一天中的一部分(时间=12-14)。这个代码对我来说很有用,但我每天都要输入一行新的代码,这将达到数百行 这看起来应该很简单。当分组变量相同时,我很容易做到这一点,但当我不想包含当天的所有值时,我不知道如何做到这一点。 有更好的方法吗R:计算组子集的平均值,r,aggregate,data.table,R,Aggregate,Data.table,我想计算每个“天”的平均值,但计算一天中的一部分(时间=12-14)。这个代码对我来说很有用,但我每天都要输入一行新的代码,这将达到数百行 这看起来应该很简单。当分组变量相同时,我很容易做到这一点,但当我不想包含当天的所有值时,我不知道如何做到这一点。 有更好的方法吗 sapply(sap[sap$Day==165 & sap$Time %in% c(12,12.1,12.2,12.3,12.4,12.5,13,13.1,13.2,13.3,13.4,13.5, 14), ],mean)
sapply(sap[sap$Day==165 & sap$Time %in% c(12,12.1,12.2,12.3,12.4,12.5,13,13.1,13.2,13.3,13.4,13.5, 14), ],mean)
sapply(sap[sap$Day==166 & sap$Time %in% c(12,12.1,12.2,12.3,12.4,12.5,13,13.1,13.2,13.3,13.4,13.5, 14), ],mean)
以下是数据的样子:
Day Time StomCond_Trunc
165 12 33.57189926
165 12.1 50.29437636
165 12.2 35.59876214
165 12.3 24.39879768
试试这个:
aggregate(StomCond_Trunc~Day,data=subset(sap,Time>=12 & Time<=14),mean)
aggregate(StomCond_Trunc~Day,data=subset(sap,Time>=12&Time如果你有一个大的数据集,你可能还想查看data.table
包。将data.frame
转换为data.table
非常简单
例如:
大型(ish)数据集
将其转换为数据表
dt system.time(dt[time>=12&time使用您原来的方法,但输入较少:
sapply(sap[sap$Day==165 & sap$Time %in% seq(12, 14, 0.1), ],mean)
然而,这只是一个比你原来的方法稍微好一点的方法。它不像其他答案那样灵活,因为它依赖于你的时间值的0.1增量。其他方法不关心增量大小,这使它们更通用。我建议@Maiasaura的答案带有数据。table
>system.time(aggregate(StomCond_Trunc~Day,data=subset(df,Time>=12 & Time<=14),mean))
user system elapsed
16.255 0.377 24.263
dt <- data.table(df,key="Time")
>system.time(dt[Time>=12 & Time<=14,mean(StomCond_Trunc),by=Day])
user system elapsed
9.534 0.178 15.270
df <- data.frame(Day=1:1000000,
Time=sample(1:14,1000000,replace=T),
StomCond_Trunc=rnorm(100000)*20)
system.time(aggregate(StomCond_Trunc~Day,data=subset(df,Time>=12 & Time<=14),mean))
# user system elapsed
# 10.19 0.27 10.47
dt <- data.table(df,key="Time")
system.time(dt[Time>=12 & Time<=14,mean(StomCond_Trunc),by=Day])
# user system elapsed
# 0.31 0.00 0.31
sapply(sap[sap$Day==165 & sap$Time %in% seq(12, 14, 0.1), ],mean)