在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
相关产品推荐
相关产品推荐

