R语言如何计算DataFrame行间时间差并新增IdlingTime分钟列
R计算空转时长的解决方案
首先确保你的StartTime和EndTime列是R可识别的日期时间格式,若当前为字符串类型需要先做格式转换,再计算空转时长即可。
步骤1:转换时间列格式
# 以下是示例数据构造,你可以直接替换为自己的实际数据框 df <- data.frame( StartTime = c("2019-05-06 08:34:15", "2019-05-06 10:07:18", "2019-05-06 15:13:10", "2019-05-06 15:35:52", "2019-05-06 16:14:18", "2019-05-06 16:58:14", "2019-05-06 20:28:50", "2019-05-06 21:55:53", "2019-05-06 22:42:21", "2019-05-06 23:26:59", "2019-05-07 00:36:43"), EndTime = c("2019-05-06 08:48:30", "2019-05-06 10:21:34", "2019-05-06 15:27:26", "2019-05-06 15:50:07", "2019-05-06 16:33:58", "2019-05-06 17:13:36", "2019-05-06 21:05:11", "2019-05-06 22:16:50", "2019-05-06 22:57:46", "2019-05-07 00:03:46", "2019-05-07 00:53:44") ) # 转换为POSIXct日期时间格式,若你的列已经是日期时间类型可跳过这一步 df$StartTime <- as.POSIXct(df$StartTime, format = "%Y-%m-%d %H:%M:%S") df$EndTime <- as.POSIXct(df$EndTime, format = "%Y-%m-%d %H:%M:%S")
步骤2:计算IdlingTime列
你可以根据使用习惯选择任意一种实现方式:
方法1:tidyverse风格实现
library(dplyr) df <- df %>% mutate(IdlingTime = as.numeric(difftime(lead(StartTime), EndTime, units = "mins")))
其中lead(StartTime)函数会自动取当前行下一行的StartTime值,difftime指定单位为分钟计算时间差,最后转为数值类型即可。最后一行没有对应的下一行数据,IdlingTime会返回NA,符合逻辑。
方法2:base R实现
next_start <- c(df$StartTime[-1], NA) df$IdlingTime <- as.numeric(difftime(next_start, df$EndTime, units = "mins"))
结果验证
运行后第一行的IdlingTime值为78.8,和你示例中1小时18分48秒的换算结果完全一致。
内容的提问来源于stack exchange,提问作者ken
相关产品推荐
相关产品推荐

