【问题标题】:Aggregating data on monthly basis每月汇总数据
【发布时间】:2017-08-31 21:42:20
【问题描述】:

我在 R 中有以下数据:

           date          category1  category2   category 3  category 4
1    2012-04-01            7496.00   77288.37  224099.15     700050.04
2    2012-04-02           24541.00   59103.94  138408.65     625006.84
3    2012-04-03            1249.00   15951.50  574170.30     249390.53
4    2012-04-04            5205.00   10866.00       0.00     358703.88
5    2012-04-05           10398.00       0.00  119745.17     270585.46

并使用以下脚本每月汇总数据:

data <- as.xts(data$category1,order.by=as.Date(data$date))
monthly <- apply.monthly(data,sum)
monthly

问题:我如何将as.xts(...) 应用于所有列,而不是为每个类别重复该步骤然后加入每个月度数据框?我试过了

as.xts(c("data$category1","data$category1"),order.by=as.Date(data$date))

这不起作用。

另外:有没有更好的按月汇总的方法?

【问题讨论】:

    标签: r datetime aggregate aggregate-functions


    【解决方案1】:

    使用xts 而不是as.xts

    apply.monthly(xts(df[ -1], order.by = as.Date(df$date)), mean)
    

    但是,这似乎只适用于平均值,而不适用于总和。您始终可以使用sapply 遍历列

     sapply(colnames(data[, -1]), function(x) apply.monthly(as.xts(data[,x],
                                                           order.by=as.Date(data$date)),sum))
    

    【讨论】:

    • 这只有助于获得第 -1 列。我需要所有列,或者能够选择它们。就像 as.xts(c("data$category1","data$category1"),order.by=as.Date(data$date)) 一样,不幸的是没有用。
    • 更新我的答案 - 出于某种原因,它适用于 mean,但不适用于 sum
    【解决方案2】:

    您可以使用 HydroTSM 包中的daily2monthly 函数。它不仅可以处理 xts 的参数,还可以处理多个列。 Fun 可以是 summean

    monthly <- daily2monthly(data, FUN=sum, na.rm=TRUE) 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-28
      相关资源
      最近更新 更多