首页 > 解决方案 > R - 在另一个数据框中的事件之前计算报告的数量

问题描述

我有以下两个数据框:

> Reaction_per_park_per_day_3

Park                Date
14st NE - Coventry  2019-05-08
14st NE - Coventry  2019-05-15
14st NE - Coventry  2019-08-09
14st NE - Coventry  2019-08-22
Airways Park        2018-11-27
Airways Park        2020-12-16
Airways Park        2020-12-24
Arbour Lake East    2017-01-02
Arbour Lake East    2017-01-03
Arbour Lake East    2017-01-07
Arbour Lake East    2017-01-08

> Reports_per_park_per_day_3

Park                Month
14st NE - Coventry  2019-05-16
14st NE - Coventry  2019-05-17
14st NE - Coventry  2019-08-14
Airways Park        2021-04-02
Arbour Lake East    2017-01-04
Arbour Lake East    2017-02-04

我想在 Reports_per_park_per_day_3 数据框 (Number_AC) 中添加一行,这将在同一公园内的 Reports_per_park_per_day_3 中的每个事件之前计算 Reaction_per_park_per_Day_3 数据框中的事件总数。因此,我希望 Reports_per_park_per_day_3 数据框看起来像这样:

Park                Month        Number_AC
14st NE - Coventry  2019-05-16   2
14st NE - Coventry  2019-05-17   2
14st NE - Coventry  2019-08-14   3
Airways Park        2021-04-02   2
Arbour Lake East    2017-01-04   2  
Arbour Lake East    2017-02-04   4

我尝试了以下方法,但没有成功,因为它给了我整行的 0 个事件:

> library(dplyr)

> Reports_per_park_per_day_3 <- Reports_per_park_per_day_3 %>%
  left_join( Reaction_per_park_per_day_3, by="Park" ) %>%
  filter( Date <= Month ) %>%
  group_by( Park, Month) %>%
  summarize(Number_AC = sum(Month <= Date & Month >= Date), .groups = "drop") %>%
  distinct

标签: r

解决方案


通过使用合并,您可以做您想做的事情。请记住,此解决方案不是最快的,如果您的数据帧很大,可能会导致内存问题。

Reaction_per_park_per_day_3 %>%
  merge( Reports_per_park_per_day_3 , by=NULL ) %>%
  filter( Date <= Month,Park.x==Park.y ) %>%
  select(Park = Park.x,Month,Date) %>% 
  count(Park,Month,name = "Number_AC")

推荐阅读