R语言数据框操作:按时间区间条件对事件进行分组
实现步骤
首先构造原始测试数据,提取所有非空的区间结束时间作为分组断点:
# 原始数据集 df <- data.frame( Interval.Max = c(7.5, 12.0, 19.3, rep(NA, 7)), Event.Time = c(0.4, 3.7, 5.2, 9.1, 9.8, 11.7, 12.9, 14.9, 17.0, 19.1) ) # 提取有效区间结束点 breaks <- na.omit(df$Interval.Max)
形式1:新增分组列
使用findInterval匹配事件所属区间,直接生成Group列:
# base R 实现 df$Group <- findInterval(df$Event.Time, breaks) + 1 df
输出结果:
Interval.Max Event.Time Group 1 7.5 0.4 1 2 12.0 3.7 1 3 19.3 5.2 1 4 NA 9.1 2 5 NA 9.8 2 6 NA 11.7 2 7 NA 12.9 3 8 NA 14.9 3 9 NA 17.0 3 10 NA 19.1 3
tidyverse(dplyr)实现:
library(dplyr) df %>% mutate(Group = findInterval(Event.Time, breaks) + 1)
形式2:事件映射到所属区间结束时间
根据匹配到的索引取对应的区间结束时间,生成映射表:
# base R 实现 result_map <- data.frame( Interval.Max = breaks[findInterval(df$Event.Time, breaks) + 1], Event.Onset.Time = df$Event.Time ) result_map
输出结果:
Interval.Max Event.Onset.Time 1 7.5 0.4 2 7.5 3.7 3 7.5 5.2 4 12.0 9.1 5 12.0 9.8 6 12.0 11.7 7 19.3 12.9 8 19.3 14.9 9 19.3 17.0 10 19.3 19.1
dplyr实现:
df %>% transmute( Interval.Max = breaks[findInterval(Event.Time, breaks) + 1], Event.Onset.Time = Event.Time )
注意:如果存在大于最后一个区间结束时间的事件,可通过修改
findInterval的all.inside参数、或后续过滤映射结果中的NA值处理。
内容的提问来源于stack exchange,提问作者R. N.
相关产品推荐
相关产品推荐

