根据R中的日期进行行聚合,并将相应的其他列值之和除以聚合行数
下面是我相当大的表“输入”的一部分: 我想做的是: 我希望聚合具有相同日期的行(日期在列[,1]中说明),并将列[,2]和[,3]中这些行的值除以聚合的行数 输出如下所示:根据R中的日期进行行聚合,并将相应的其他列值之和除以聚合行数,r,aggregate,R,Aggregate,下面是我相当大的表“输入”的一部分: 我想做的是: 我希望聚合具有相同日期的行(日期在列[,1]中说明),并将列[,2]和[,3]中这些行的值除以聚合的行数 输出如下所示: [,1] [,2] [,3] [1,] 20100324 4.96 2.0000000 # e.g: [1,2] = (input[7146,2] + input[7147,2])/2 = (7.70 [2,] 20100325 2.12 0.0000000
[,1] [,2] [,3]
[1,] 20100324 4.96 2.0000000 # e.g: [1,2] = (input[7146,2] + input[7147,2])/2 = (7.70
[2,] 20100325 2.12 0.0000000 + 2.22)/2 = 4.96
[3,] 20100326 2.29 0.0000000
[4,] 20100327 2.10 0.0000000
[5,] 20100328 2.15 1.2000000
[6,] 20100329 1.92 0.0000000
[7,] 20100330 2.15 0.0000000
非常感谢您的帮助 您的sampla数据
df<-read.table(text="
20100324 7.70 4.0000000
20100324 2.22 0.0000000
20100325 2.12 0.0000000
20100326 2.29 0.0000000
20100327 2.10 0.0000000
20100328 2.26 2.0000000
20100328 2.01 1.6000000
20100328 2.17 0.0000000
20100329 1.92 0.0000000
20100330 2.15 0.0000000")
使用aggregate()
也可以获得相同的结果
第三种选择是利用packagedata.table
的优势,特别是当您有大数据帧时
library(data.table)
#Convert your data frame to data table and set column V1 as key.
dt<-data.table(df,key="V1")
#Calculate mean for each column .SD means subset of your data table
dt[,lapply(.SD,mean),by=V1]
V1 V2 V3
1: 20100324 4.960000 2.0
2: 20100325 2.120000 0.0
3: 20100326 2.290000 0.0
4: 20100327 2.100000 0.0
5: 20100328 2.146667 1.2
6: 20100329 1.920000 0.0
7: 20100330 2.150000 0.0
库(data.table)
#将数据帧转换为数据表,并将列V1设置为键。
dtThx用于响应!不过我还有一个问题。我不能使用这个函数:dft这行只是我在R会话中放置数据的方式。使用数据框的实名和列的实名代替df。否则,您可以将矩阵转换为data.frame以使用上面提供的解决方案。就是这样!现在工作。必须将矩阵转换为data.frame。非常感谢你的帮助!
library(plyr)
ddply(df,.(V1),colMeans)
V1 V2 V3
1 20100324 4.960000 2.0
2 20100325 2.120000 0.0
3 20100326 2.290000 0.0
4 20100327 2.100000 0.0
5 20100328 2.146667 1.2
6 20100329 1.920000 0.0
7 20100330 2.150000 0.0
aggregate(.~V1,data=df,mean)
V1 V2 V3
1 20100324 4.960000 2.0
2 20100325 2.120000 0.0
3 20100326 2.290000 0.0
4 20100327 2.100000 0.0
5 20100328 2.146667 1.2
6 20100329 1.920000 0.0
7 20100330 2.150000 0.0
library(data.table)
#Convert your data frame to data table and set column V1 as key.
dt<-data.table(df,key="V1")
#Calculate mean for each column .SD means subset of your data table
dt[,lapply(.SD,mean),by=V1]
V1 V2 V3
1: 20100324 4.960000 2.0
2: 20100325 2.120000 0.0
3: 20100326 2.290000 0.0
4: 20100327 2.100000 0.0
5: 20100328 2.146667 1.2
6: 20100329 1.920000 0.0
7: 20100330 2.150000 0.0