You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.22 13:15:06