R语言:基于双数据框统计AC事件簇前后2周的上报记录数量
R语言生成目标数据框解决方案
核心逻辑
- 先聚合AC事件数据:按公园、事件簇编号分组,计算每个簇的首个事件日期、末次事件日期、簇内事件总数
- 匹配上报数据:逐簇统计对应公园、对应时间范围内的上报记录数
实现代码
# 加载依赖包,仅需dplyr即可完成 library(dplyr) # 第一步:聚合得到每个AC事件簇的基础信息 cluster_basic <- AC_clusters %>% group_by(Park, Cluster) %>% summarise( Start_date = min(Date), End_date = max(Date), Number_AC = n(), .groups = "drop" # 分组运算完成后取消分组 ) # 第二步:统计每个簇前后2周的上报记录数,得到最终结果 reports_before_after_AC_clusters <- cluster_basic %>% rowwise() %>% mutate( # 统计簇首日期前14天内的上报数(不含簇首当天) Number_reports_before = sum( Reports_per_park_per_day_2$Park == Park & Reports_per_park_per_day_2$Date >= Start_date - 14 & Reports_per_park_per_day_2$Date < Start_date ), # 统计簇末日期后14天内的上报数(不含簇末当天) Number_reports_after = sum( Reports_per_park_per_day_2$Park == Park & Reports_per_park_per_day_2$Date > End_date & Reports_per_park_per_day_2$Date <= End_date + 14 ) ) %>% ungroup()
优化说明
如果你的数据量超过10万行,可改用data.table或fuzzyjoin包的关联逻辑提升运算效率,小数据集直接运行上述代码即可得到和预期完全一致的输出结果。
内容的提问来源于stack exchange,提问作者Gab_Laj
相关产品推荐
相关产品推荐

