使用唯一值将数据聚合到一列

时间:2016-04-27 16:28:10

标签: r aggregate

我有一个数据框yy。我想做一个数据的聚合。有一个时间戳变量,时间变量中有重复。 我想找到时间戳的唯一值,并汇总此数据框中与此唯一时间戳值相关的所有其他变量。最后我需要得到其他变量的均值。 这是数据样本

 temp yield density          time
1   54    NA   30.23 2009-12-31 18
2   54    NA   30.22 2009-12-31 19
3   53    NA   30.20 2009-12-31 20
4   53    NA   30.19 2009-12-31 21
5   50    NA   30.18 2009-12-31 22
6   51     3   30.16 2009-12-31 23
.......

我运行以下代码:

aggdata=aggregate(yy~time, by= list(unique(time)), data =yy, FUN = mean,na.rm=TRUE)

我收到了这个警告

  

参数不是数字或逻辑:返回NA

如果我一次运行聚合一个变量,它就可以运行

aggdata=aggregate(temp~time, by= list(unique(time)),data=yy,FUN=mean)

但如果使用整个数据列表yy,则存在错误。 有人可以解释一下吗?

2 个答案:

答案 0 :(得分:0)

这似乎可以使用包dplyr

轻松完成

您可以执行以下操作:

yy <- yy %>% group_by(time) %>% summarize(meantemp = mean(temp), meanyield = mean(yield))

答案 1 :(得分:0)

使用data.table,将'data.frame'转换为'data.table'(setDT(yy)),按'时间'分组,指定要在.SDcols中汇总的列,循环通过他们获得mean

 library(data.table)
 setDT(yy)[, lapply(.SD, mean, na.rm=TRUE), by = time, .SDcols = c("temp", "yield")]