R使用日期列聚合data.frame

时间:2014-07-16 18:50:46

标签: r object aggregate as.date

我的数据框重新设置了下面的数据框

Date       Expenditure Indicator
29-01-2011 5455        212
25-01-2012 5452        111
11-02-2011 365         5

我目前有兴趣总结支出值,我试图使用下面的功能

dta.sum <- aggregate(x = dta, FUN = sum, 
                         by = list(Group.date = dta$date))

但是R返回以下错误, Summary.Date中的错误(c(15614L,15614L,15614L,15614L,15614L,15614L,:未定义为&#34的总和;日期和#34;对象 Date 列以前使用 as.Date 函数定义为日期。类似函数但使用 mean 可正常工作。< / p>

dta.sum <- aggregate(x = dta, FUN = mean 
                             by = list(Group.date = dta$date))

我想将日期格式化为日期。

4 个答案:

答案 0 :(得分:5)

指出要在聚合语句中获取聚合的变量,并且应该解决此问题:

dta.sum <- aggregate(x = dta[c("Expenditure","Indicator")],
                     FUN = sum,
                     by = list(Group.date = dta$Date))

编辑添加说明:当您将aggregate参数仅作为dta时,聚合尝试将参数应用于每一列。没有为R中的日期值定义sum,因此您会收到错误。您希望使用上述代码排除分组列。

答案 1 :(得分:4)

从基础升级并使用data.table来简化(并加快)您的代码/生活:

library(data.table)

dt = as.data.table(dta)

dt[, lapply(.SD, sum), by = Date]

答案 2 :(得分:4)

或使用dplyr

library(dplyr)

dta %>%
  group_by(Date) %>%
  summarise(Tot.Expenditure = sum(Expenditure))

答案 3 :(得分:3)

df <- data.frame(c('29-01-2011', '25-01-2012', '11-02-2011'), c(5455, 5452, 365), c(212, 211, 5))
colnames(df) <- c('Date', 'Expenditure', 'Indicator')
colSums(df[2])

#>Expenditure 
#11272