首页 > 解决方案 > cumsum 有几个组和不连续的日期

问题描述

我有这种情况:

library(dplyr)
library(lubridate)

df <- data.frame(
    date = c(
          as.Date("2015-3-1")
        , as.Date("2015-1-1")
        , as.Date("2015-5-1")
    )
    ,cat1 = as.factor(c("cat11","cat11","cat11"))
    ,cat2 = as.factor(c("cat21","cat21","cat21"))
    ,x = c(1,2,3)  
)

我想按日期顺序计算每个 cat1 x cat2 组合的 x 的累积总和(组合为 2 => 3 => 6)。这是我尝试过的:

df %>%
    group_by(
        date
        , cat1
        , cat2
    ) %>%
    arrange(
        date,
        cat1,
        cat2 
    ) %>%
    mutate(
        cumsum_x = cumsum(x)
    ) %>%
    ungroup()

错误的结果是:

在此处输入图像描述

有人可以这样并提出解决方案吗?请注意,这应该适用于更多类别组合,并且应根据可能不连续的日期的顺序分别为每个组合计算累积总和。

标签: r

解决方案


df %>%
    group_by(cat1
        , cat2
    ) %>%
    arrange(
        date
    ) %>%
    mutate(
        cumsum_x = cumsum(x)
    ) %>%
    ungroup()

推荐阅读