如何在R语言中统计各时间区间内的事件时间戳数量?
解决时间区间内事件数量统计问题
问题原因
直接用mutate(sum(events %within% interval))出现长度不匹配且结果错误,是因为interval是整列向量,events %within% interval会生成一个行数等于事件数、列数等于区间数的逻辑矩阵,直接sum会把所有元素求和,而非按行统计每个区间对应的事件数。
解决方案
方法1:用rowwise()逐行处理
先加载所需包,对数据框按行分组后,逐行计算每个区间内的事件数:
library(lubridate) library(dplyr) library(tibble) # 构造规范数据(显式转换日期格式) table <- tibble( start = ymd(c( "2022-08-02", "2022-10-06", "2023-01-11")), end = ymd(c("2022-08-04", "2023-02-06", "2023-02-04")), interval = start %--% end ) events <- ymd(c("2022-08-07", "2022-10-17", "2023-01-17", "2023-02-02")) # 逐行统计事件数量 result <- table %>% rowwise() %>% mutate(event_count = sum(events %within% interval)) %>% ungroup() print(result)
方法2:用purrr::map_int遍历区间
若不想用rowwise(),可借助purrr的映射函数逐个处理每个区间元素:
library(purrr) result <- table %>% mutate(event_count = map_int(interval, ~sum(events %within% .x))) print(result)
结果说明
运行后会得到新增event_count列的表格,对应每个区间的事件数:
- 第一个区间
2022-08-02至2022-08-04:0个事件 - 第二个区间
2022-10-06至2023-02-06:3个事件 - 第三个区间
2023-01-11至2023-02-04:2个事件
内容的提问来源于stack exchange,提问作者dcossyleon
相关产品推荐
相关产品推荐

