首页 > 解决方案 > 如果在 dplyr r 中将列与 groupby 匹配,则求和

问题描述

我需要帮助来使用 dplyr 和 group_by “sumif”,就像这样:

样本df:

df = data.frame(year = c(1990,1990,1990,1990,1990,1990,1990,1990,1990,1990,1990,1990,1991,1991,1991,1991,1991,1991,1991,1991,1991,1991,1991,1991),
                    month = c(seq(1,12), seq(1,12)),
                    value = c(2,4,5,3,4,6,7,5,4,3,6,4,5,6,5,4,5,6,4,3,5,6,4,6))
    
    df %>%
      group_by(year) %>%
      mutate(summonths12345 = "sum of values of months 1,2,3,4,5")

这是我的 df 的主要目标:

year month value summonths12345
1990     1     2  18
1990     2     4  18
1990     3     5  18
1990     4     3  18
1990     5     4  18
1990     6     6  18
1990     7     7  18
1990     8     5  18
1990     9     4  18
1990    10     3  18
1990    11     6  18
1990    12     4  18
1991     1     5  25
1991     2     6  25
...     ..    ..  ...

标签: r

解决方案


添加过滤器并重新加入。可能效率不高,但效果很好。

summary <- df %>%
    filter(month < 6) %>%
    group_by(year) %>%
    summarize(summonths12345 = sum(value)) %>%
    right_join(df, by="year")

您是否需要它是动态的,就像在 YTD 类型函数中一样?

library(lubridate)

summary <- df %>%
    filter(month < month(Sys.Date())) %>%
    group_by(year) %>%
    summarize(summonths12345 = sum(value)) %>%
    right_join(df, by="year")

推荐阅读