【问题标题】:How to sum multiple dataframe's variables by month如何按月汇总多个数据框的变量
【发布时间】:2017-09-28 08:53:24
【问题描述】:

我在这里解决了一个非常相似的问题how to sum data by month and store them in the first day of the month

与上述帖子唯一不同的是,我的真实data.frame有300个变量,需要按月分组和求和。

类似这样的:

    date        gauge1   gauge2  gauge3
 1937-02-19   25.768334  23.98   111.3
 1937-02-20   24.918828  21.987  33.9
 1937-02-21   24.069322  19.96   18.981

期望的输出:

 date         gauge1    gauge2   gauge3
 1937-02-01   3328.98   2229.0   11541.3
 1937-03-01   222.19    1176.8   1098.8
 1937-04-01   1124.8    3395.15  1558.9

根据我尝试过的@jeremycg 回答:

library(dplyr)
qfile %>% mutate(monthyear = as.character(format(date, "%m-%Y"))) %>%
          arrange(date) %>% 
          group_by(monthyear) %>%
          summarise(date=date[1], flow = sum(df[, c(2:4)])

但它不起作用。

任何帮助将不胜感激。

谢谢

【问题讨论】:

  • 为了让您的问题对其他人有用,请解释为什么 dplyr 尝试失败。谢谢。
  • 我不知道为什么它不起作用..对不起
  • 您收到错误消息了吗?
  • 是的,但不记得了。对不起

标签: r date sum


【解决方案1】:

如果您的数据集的所有 列除了date 列需要分组和求和,您可以尝试:

library(data.table)
setDT(qfile)[, lapply(.SD, sum), by = lubridate::floor_date(date, "month")]
    lubridate   gauge1 gauge2  gauge3
1: 1937-02-01 74.75648 65.927 164.181

或者,如果您想重命名分组变量:

setDT(qfile)[, lapply(.SD, sum), by = (date = lubridate::floor_date(date, "month"))]
         date   gauge1 gauge2  gauge3
1: 1937-02-01 74.75648 65.927 164.181

按照@Henrik 的建议,可以通过使用data.table 的内置mday() 函数来避免从另一个包调用函数:

setDT(qfile)[, lapply(.SD, sum), by = (date = date - mday(date) + 1)]

【讨论】:

    猜你喜欢
    • 2018-12-26
    • 1970-01-01
    • 2023-01-12
    • 2021-12-18
    • 2019-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多