根据R中的日期进行行聚合,并将相应的其他列值之和除以聚合行数

根据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]  [,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()
也可以获得相同的结果

第三种选择是利用package
data.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