按日期分组和计数 (R)

Posted

技术标签:

【中文标题】按日期分组和计数 (R)【英文标题】:Grouping and Counting by Dates (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

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

谢谢

【问题讨论】:

【参考方案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】:
    mutateevent 列并计算cumsum group_bystartdatesummarisemax(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))

【讨论】:

以上是关于按日期分组和计数 (R)的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 按日期和计数分组,包括丢失的日期

在熊猫数据框中按日期和计数值分组

嵌套字典:按日期分组,然后按枚举值分组并汇总计数

按日期间隔大于 X 的 DATETIME 获取数据、计数和分组

Laravel 仅按日期分组并获取计数

当日期不唯一时,在熊猫中按日期分组后计数观察值