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

如何用R脚本生成依赖前一行的Start与End时间列?

在R中基于Duration列生成连续的Start和End时间列

问题背景

需要基于已有Duration_secs列生成互相依赖的Start和End列,规则如下:

  • 第一行Start固定为0,End = Start + Duration_secs
  • 后续每行Start等于上一行的End值,End = 当前Start + Duration_secs

示例数据:

data <- data.frame(Duration_secs = c(26, 300, 300, 300, 300, 300, 300, 300, 247, 300, 300, 300, 300))

解决方案

方法1:Base R(无需额外包)

核心思路:Start列是前n-1个Duration_secs的累计和(第一行为0),End列是Start加当前行Duration_secs,等价于所有Duration_secs的累计和。

# 生成Start列:第一行0,后续为前序Duration的累计和
data$Start <- c(0, cumsum(data$Duration_secs[-nrow(data)]))
# 生成End列
data$End <- data$Start + data$Duration_secs

方法2:dplyr(tidyverse风格)

利用cumsum结合lag函数,一行代码生成所需列:

library(dplyr)

data <- data %>%
  mutate(
    Start = lag(cumsum(Duration_secs), default = 0), # 上一行的累计和,第一行默认0
    End = cumsum(Duration_secs) # 直接取累计和作为End
  )

方法3:data.table(适合大数据量)

如果处理的是大型数据集,data.table的效率更高:

library(data.table)

setDT(data)[, `:=`(
  Start = shift(cumsum(Duration_secs), fill = 0),
  End = cumsum(Duration_secs)
)]

输出结果

运行上述任意代码后,data的结果如下:

Duration_secs Start  End
1             26     0   26
2            300    26  326
3            300   326  626
4            300   626  926
5            300   926 1226
6            300  1226 1526
7            300  1526 1826
8            300  1826 2126
9            247  2126 2373
10           300  2373 2673
11           300  2673 2973
12           300  2973 3273
13           300  3273 3573

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 20:09:30