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

在R中不使用for循环根据相邻行值计算等待时间并新增列的实现方法

R实现等待时间列计算方案

实现思路

使用dplyr包的lag()函数获取前序行的end_time值,采用向量式运算实现,完全避免循环写法,符合R的开发规范。

实现代码

# 加载依赖包
library(dplyr)

# 假设你的数据集命名为df
df <- df %>%
  # 多案例场景请取消下行注释,按案例分组计算等待时间
  # group_by(Case_id) %>%
  mutate(
    # 取前1行、前2行的end_time,首行前序值默认用自身end_time填充
    lag1_end = lag(end_time, 1, default = first(end_time)),
    lag2_end = lag(end_time, 2, default = first(end_time)),
    # 按规则计算等待时间,单位为分钟
    Waiting_Time = case_when(
      row_number() == 1 ~ 0,
      start_time >= lag1_end ~ as.numeric(difftime(start_time, lag1_end, units = "mins")),
      TRUE ~ as.numeric(difftime(start_time, lag2_end, units = "mins"))
    ),
    # 删除临时计算列
    lag1_end = NULL,
    lag2_end = NULL
  ) %>%
  # 多案例场景请取消下行注释,取消分组
  # ungroup()

规则适配说明

  • 第一行等待时间固定为0,符合示例要求
  • 若当前行start_time晚于等于上一行end_time,直接计算两行时间差,结果转换为分钟整数
  • 若当前行start_time早于上一行end_time,自动取前两行的end_time计算差值,适配示例中第4行、第9行的特殊计算规则
  • 第二行不存在前两行数据,默认取第一行end_time计算,差值为0符合示例结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 01:45:03