如何在R中按因子分组统计多个时间区间内的事件数量
解决方案
你可以直接用分组批量处理逻辑代替手动拆分每个站点的对象,完整可运行代码如下:
library(tidyverse) library(lubridate) # 1. 合并区间端点与基准起点,批量生成各站点的时间区间 interval_df <- bind_rows(mydata, myorigins) %>% arrange(mystations, myintervals) %>% group_by(mystations) %>% reframe( myintervals = int_diff(myintervals) ) # 2. 匹配检测事件所属区间,分组统计数量 result <- mydetections %>% left_join(interval_df, by = "mystations") %>% filter(date.time %within% myintervals) %>% count(mystations, myintervals, name = "value") %>% rename(mystation = mystations) # 查看结果,和你给出的期望输出完全一致 print(result, right = FALSE)
代码逻辑说明
- 无需将分组后的数据集拆分导出到全局环境,通过
group_by+reframe直接批量为所有站点生成对应的时间区间列表 - 用左连接关联同站点的检测数据和区间数据,通过
%within%匹配事件所属区间后直接分组计数 - 后续如果新增站点也不需要修改代码逻辑,可自动适配所有站点的统计需求
如果需要保留无事件的区间(计数为0),可以在最后补充全连接补0的逻辑:
result_full <- interval_df %>% left_join(result, by = c("mystations" = "mystation", "myintervals")) %>% mutate(value = replace_na(value, 0)) %>% rename(mystation = mystations)
内容的提问来源于stack exchange,提问作者stefano
相关产品推荐
相关产品推荐

