【问题标题】:Grouping and Counting by Dates (R)按日期分组和计数 (R)
【发布时间】:2021-11-10 20:47:33
【问题描述】:

我正在使用 R 编程语言。我有一个如下所示的数据框:

  startdate <- c('2010-01-01','2010-01-01','2010-01-01', '2010-01-02','2010-01-03','2010-01-03')

event <- c(1,1,1,1,1,1)
    
 my_data <- data.frame(startdate, event)

   startdate event
1 2010-01-01     1
2 2010-01-01     1
3 2010-01-01     1
4 2010-01-02     1
5 2010-01-03     1
6 2010-01-03     1

注意:“startdate”的实际值为“POSIXct”,写成“year-month-date”。

我正在尝试根据“开始日期”列获取“事件”的累积总和。结果应该是这样的

  startdate <- c('2010-01-01', '2010-01-02' ,'2010-01-03')

event <- c(3,4,6)
    
 my_data_2 <- data.frame(startdate, event)

#desired file
   startdate event
1 2010-01-01     3
2 2010-01-02     4
3 2010-01-03     6

我尝试使用“dplyr”库来做到这一点:

library(dplyr)

new_file = my_data %>% group_by(startdate) %>% mutate(cumsum_value = cumsum(event))

但这会返回一些稍微不同且非预期的东西:

 startdate  event cumsum_value
  <chr>      <dbl>        <dbl>
1 2010-01-01     1            1
2 2010-01-01     1            2
3 2010-01-01     1            3
4 2010-01-02     1            1
5 2010-01-03     1            1
6 2010-01-03     1            2

谁能告诉我如何解决这个问题?

谢谢

【问题讨论】:

    标签: r date dplyr group-by data-manipulation


    【解决方案1】:
    my_data %>%
      mutate(cumsum = cumsum(event)) %>%
      group_by(startdate) %>%
      summarise(max(cumsum))
    
    # A tibble: 3 × 2
      startdate  `max(cumsum)`
      <chr>              <dbl>
    1 2010-01-01             3
    2 2010-01-02             4
    3 2010-01-03             6
    

    【讨论】:

      【解决方案2】:
      1. mutateevent 列并计算cumsum
      2. group_bystartdate
      3. summarisemax(event)
      library(dplyr)
      my_data %>%
          mutate(event = cumsum(event)) %>% 
          group_by(startdate) %>% 
          summarise(event = max(event))
      ```
      ```
        startdate  event
        <chr>      <dbl>
      1 2010-01-01     3
      2 2010-01-02     4
      3 2010-01-03     6
      ```
      

      【讨论】:

      • 请添加为答案!
      【解决方案3】:

      另一种选择是使用duplicated,从而避免使用group_by。另外,如果'event'列只有1,我们可以不用cumsum,而是使用内置函数row_number()来创建一个序列

      library(dplyr)
      my_data %>%
         mutate(event = row_number()) %>% 
         filter(!duplicated(startdate, fromLast = TRUE))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-21
        • 2021-05-18
        • 1970-01-01
        • 1970-01-01
        • 2015-06-01
        • 2014-11-06
        • 1970-01-01
        • 2019-02-16
        相关资源
        最近更新 更多