首页 > 解决方案 > 沿 mutate 函数使用 cumsum() 的问题

问题描述

我有这个简化df,我试图cumsum()为每个组

library(dplyr)

Country <- c(rep("A",5), rep("B",4), rep("C", 5))
Date <- 1:14
Value <- c(2:6, 10:13, 7:11)

df <- data.frame(Date, Country, Value)
> view(df)

    Date Country Value
     1       A     2
     2       A     3
     3       A     4
     4       A     5
     5       A     6
     6       B    10
     7       B    11
     8       B    12
     9       B    13
    10       C     7
    11       C     8
    12       C     9
    13       C    10
    14       C    11

我知道这似乎是一个重复的问题,但我正在执行以下操作,不知道为什么不起作用。我得到的不是按组的累积总和,而是cumsum所有列:

df_sum <- df%>%
    group_by(Country) %>%
  mutate(Sum = cumsum(Value))


   Date Country Value   Sum
   <int> <chr>   <int> <int>
      1  A           2     2
      2  A           3     5
      3  A           4     9
      4  A           5    14
      5  A           6    20
      6  B          10    30
      7  B          11    41
      8  B          12    53
      9  B          13    66
      10 C           7    73
      11 C           8    81
      12 C           9    90
      13 C          10   100
      14 C          11   111

标签: rdplyrcumsum

解决方案


OP 加载的plyr包也可能掩盖dplyr::mutateplyr::mutate. 要么,在仅加载的新R会话上执行此操作,要么指定dplyrpackagename::functionname dplyr::mutate

library(dplyr)
df%>%
  group_by(Country) %>%
  dplyr::mutate(Sum = cumsum(Value)) %>%
  ungroup

-输出

# A tibble: 14 x 4
#    Date Country Value   Sum
#   <int> <chr>   <int> <int>
# 1     1 A           2     2
# 2     2 A           3     5
# 3     3 A           4     9
# 4     4 A           5    14
# 5     5 A           6    20
# 6     6 B          10    10
# 7     7 B          11    21
# 8     8 B          12    33
# 9     9 B          13    46
#10    10 C           7     7
#11    11 C           8    15
#12    12 C           9    24
#13    13 C          10    34
#14    14 C          11    45

推荐阅读