2016-04-27 25 views
1

我有一个数据框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

如果我一次运行聚合一个变量,它就是我rks

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

但是,如果使用整个数据列表yy,则会出现错误。 有人能解释一下吗?

+1

查看帮助页面''aggregate',我看不到像'aggregate(formula,by,data,FUN)'这样的语法。也许你需要选择支持的语法。 – Frank

回答

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")] 
+0

这里by =时间,所以它会返回并聚合时间的唯一值? – newleaf

+0

@newleaf是的,它会通过独特的时间价值聚合 – akrun

+0

这是快速和整洁。谢谢。 – newleaf

0

这似乎喜欢的事,可以很容易地使用包来完成dplyr

你可以做一些事情如下:

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