3

我的数据框与下面的数据框相似

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, : sum not defined for "Date" objectsDate列以前定义为使用 as 的日期.Date函数。类似的函数,但平均值工作正常。

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

我想保持日期格式为日期。

4

4 回答 4

6

在你的聚合语句中指出你试图获取聚合的变量,这个问题应该得到解决:

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

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

于 2014-07-16T18:53:20.813 回答
5

或使用dplyr

library(dplyr)

dta %>%
  group_by(Date) %>%
  summarise(Tot.Expenditure = sum(Expenditure))
于 2014-07-16T19:48:36.767 回答
4

从基础升级并改用它data.table来简化(和加速)您的代码/生命:

library(data.table)

dt = as.data.table(dta)

dt[, lapply(.SD, sum), by = Date]
于 2014-07-16T19:01:04.673 回答
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 
于 2014-07-16T19:23:35.400 回答