【问题标题】:How to create a running sum summary in R如何在 R 中创建运行总和摘要
【发布时间】:2019-07-22 19:49:32
【问题描述】:

我想从数据框df 创建一个摘要报告,其中每一行是基于列B 的列A 的累积总和(其中C 是另一个id 列)。下面是数据和输出:

set.seed(154)
df <- data.frame(B = append(append(rep(1,10),rep(2,10)),rep(3,10)),
                C = rep(1:10,3),
                A = sample(0:10,30,replace=T)) %>% arrange(B,C)

输出:

我写的是

df %>% arrange(B) %>% group_by(B) %>%
  transmute(test =sum(cumsum(A))) %>% unique()

但它只是对每列 B 求和,而不是累积。

【问题讨论】:

    标签: r dplyr cumsum


    【解决方案1】:

    可能我们需要通过'B'得到'A'的sum,然后得到累积和

    library(dplyr)
    df %>% 
      group_by(B) %>% 
      summarise(A = sum(A))  %>% 
      mutate(A = cumsum(A))
    

    【讨论】:

    • 我刚刚意识到,当您按二维分组但希望累积总和基于一维时,这不起作用
    • @Ana 在这种情况下,你可能需要df %&gt;% group_by(B, C) %&gt;% mutate(A = sum(A)) %&gt;% ungroup %&gt;% distinct %&gt;% group_by(B) %&gt;% mutate(A = cumsum(A))
    • 谢谢,非常有帮助!
    【解决方案2】:

    你需要在group_by(B)之后使用函数cumsum,即:

    library(tidyverse)
    df %>% 
       group_by(B) %>% 
       mutate(A_cum_sum = cumsum(A))
    

    请注意,arrange(B) 无关紧要,因为您的数据按 B 分组。从上下文中我推断只有 arrange(C) 很重要,并且您已经在准备 df 时使用了它,因此不再需要它。

    【讨论】:

      猜你喜欢
      • 2011-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-05
      • 2021-03-27
      • 2014-03-09
      • 2022-11-11
      • 2023-02-25
      相关资源
      最近更新 更多