2016-04-27 28 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)) 
相關問題