首页 > 解决方案 > 计算R中多列的累积和

问题描述

R newb,我正在尝试计算按年、月、组和子组分组的累积总和,也有多个列要计算。

数据样本:

df <- data.frame("Year"=2020,
                "Month"=c("Jan","Jan","Jan","Jan","Feb","Feb","Feb","Feb"),
                "Group"=c("A","A","A","B","A","B","B","B"),
                "SubGroup"=c("a","a","b","b","a","b","a","b"),
                "V1"=c(10,10,20,20,50,50,10,10),
                "V2"=c(0,1,2,2,0,5,1,1))
    
       Year Month Group SubGroup V1 V2
    1 2020   Jan     A        a 10  0
    2 2020   Jan     A        a 10  1
    3 2020   Jan     A        b 20  2
    4 2020   Jan     B        b 20  2
    5 2020   Feb     A        a 50  0
    6 2020   Feb     B        b 50  5
    7 2020   Feb     B        a 10  1
    8 2020   Feb     B        b 10  1

想要的结果表:

      Year Month Group SubGroup V1 V2
    1 2020   Jan     A        a 20  1
    2 2020   Feb     A        a 70  1
    3 2020   Jan     A        b 20  2
    4 2020   Feb     A        b 20  2
    5 2020   Jan     B        a  0  0
    6 2020   Feb     B        a 10  1
    7 2020   Jan     B        b 20  2
    8 2020   Feb     B        b 80  8

从样本表中,在 2020 年 1 月,“A”组子组“a”的总和为 10+10 = 20... 在 2020 年 2 月,该值为 50,因此从 1 月开始为 20 + 50 = 70,依此类推。 ..

如果没有值,则应考虑为 0。

我尝试了一些代码,但没有一个甚至没有接近我需要的输出。如果有人能帮助我解决这个问题,我将不胜感激。

标签: r

解决方案


这是一个简单的group_by/mutate问题。列V1, V2被选择acrosscumsum应用于它们。

df$Month <- factor(df$Month, levels = c("Jan", "Feb"))

df %>%
  group_by(Year, Group, SubGroup) %>%
  mutate(across(V1:V2, ~cumsum(.x))) %>%
  ungroup() %>%
  arrange(Year, Group, SubGroup, Month)
## A tibble: 8 x 6
#  Year  Month Group SubGroup    V1    V2
#  <chr> <fct> <chr> <chr>    <dbl> <dbl>
#1 2020  Jan   A     a           10     0
#2 2020  Jan   A     a           20     1
#3 2020  Feb   A     a           70     1
#4 2020  Jan   A     b           20     2
#5 2020  Feb   B     a           10     1
#6 2020  Jan   B     b           20     2
#7 2020  Feb   B     b           70     7
#8 2020  Feb   B     b           80     8

推荐阅读