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

R语言处理时序数据:时间区间跨整分钟标记时如何新增拆分行

优化方案

使用dplyr的reframe()函数可以一步完成拆分逻辑,无需创建多个中间数据框,代码简洁且通用性更强:

library(tidyverse)

df %>%
  reframe(
    speaker = speaker,
    # 生成时间断点:原起始时间+区间内所有整分钟节点+原结束时间
    cuts = sort(unique(c(start, seq(ceiling(start/60000)*60000, end, 60000), end))),
    # 相邻断点配对作为拆分后的起止时间
    start = head(cuts, -1),
    end = tail(cuts, -1),
    .by = everything() # 按原行所有字段分组,逐行处理
  ) %>%
  select(speaker, start, end) %>%
  arrange(start)

运行后输出结果如下:

speaker  start    end
1     <NA>      0  20000
2        A  20000  35000
3     <NA>  35000  60000
4     <NA>  60000  65000
5        B  65000  80000
6     <NA>  80000 100000
7        C 100000 110000
8     <NA> 110000 120000
9     <NA> 120000 140000
10       C 140000 180000
11       C 180000 195000

方案优势

  • 天然支持跨多个整分钟节点的行拆分,比如时间范围从50000到130000的行,会自动拆为50000-60000、60000-120000、120000-130000三行,适用场景更广
  • 无冗余中间表,代码结构清晰,维护成本低
  • 若dplyr版本低于1.1.0不支持.by参数,将.by = everything()替换为group_by(across(everything()))即可正常运行

内容的提问来源于stack exchange,提问作者Chris Ruehlemann

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 07:45:05