【问题标题】:Cumulative count by group over time in r在 r 中随时间按组的累积计数
【发布时间】:2021-09-14 12:05:59
【问题描述】:

我知道这可能是一个简单的操作,但我找不到解决方案。我知道它应该是某种形式的 group_by 和 sum 或 cumsum,但我不知道如何。我想随着时间的推移按组绘制某物的累积计数。我每组有多行和需要计算的时间(以及一些缺失的数据)。 我的数据集看起来有点像这样

df <- data.frame(group = c("A","A","A","A","B","B","B","C","C","C","C","C"),
                    time = c(1,1,2,3,1,2,2,1,2,2,3,3))

我想要这个结果:

group time count
    A    1     2
    A    2     3
    A    3     4
    B    1     1
    B    2     3
    C    1     1
    C    2     3
    C    3     5

我通常使用 dplyr,但我对 base R 也很满意。 我该怎么做?

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    我们可以使用summarisegroup_by

    library(dplyr)
    df %>% 
        group_by(group, time) %>% 
        summarise(count = n()) %>% 
        group_by(group) %>% 
        mutate(count = cumsum(count)) %>% 
        ungroup
    

    -输出

    # A tibble: 8 x 3
      group  time count
      <chr> <dbl> <int>
    1 A         1     2
    2 A         2     3
    3 A         3     4
    4 B         1     1
    5 B         2     3
    6 C         1     1
    7 C         2     3
    8 C         3     5
    

    【讨论】:

      【解决方案2】:

      您可以使用countcumsum -

      library(dplyr)
      
      df %>%
        count(group, time, name = 'count') %>%
        group_by(group) %>%
        mutate(count = cumsum(count)) %>%
        ungroup
      
      #   group  time count
      #  <chr> <dbl> <int>
      #1 A         1     2
      #2 A         2     3
      #3 A         3     4
      #4 B         1     1
      #5 B         2     3
      #6 C         1     1
      #7 C         2     3
      #8 C         3     5
      

      【讨论】:

        【解决方案3】:

        您可以使用以下解决方案:

        library(dplyr)
        
        df %>%
          group_by(group, time) %>%
          add_count() %>%
          distinct() %>%
          group_by(group) %>%
          mutate(n = cumsum(n))
        
        # A tibble: 8 x 3
        # Groups:   group [3]
          group  time     n
          <chr> <dbl> <int>
        1 A         1     2
        2 A         2     3
        3 A         3     4
        4 B         1     1
        5 B         2     3
        6 C         1     1
        7 C         2     3
        8 C         3     5
        

        【讨论】:

          猜你喜欢
          • 2014-10-31
          • 1970-01-01
          • 1970-01-01
          • 2019-12-22
          • 2019-04-24
          • 2013-06-19
          • 2020-08-27
          • 1970-01-01
          • 2014-05-15
          相关资源
          最近更新 更多