如何在R中计算相邻骑行记录间隔时间并新增difftime列
R实现相邻骑行行程间隔时间计算
前置说明
计算前请确保你的数据已按行程开始时间升序排列,否则会导致间隔计算结果错误。
实现步骤
- 把
Start time、End time两个文本字段转换为R可识别的POSIXct时间格式 - 提取上一行行程的结束时间,和当前行的开始时间做差,指定差值单位为小时
- 首行没有前置行程,自动赋值为NA
代码实现
tidyverse版本(推荐,语法更易读)
# 加载dplyr包 library(dplyr) # 构造测试数据,实际使用时替换为你自己的数据集 df <- data.frame( ride = 1:4, `Start time` = c("2019-09-01 06:02:09", "2019-09-01 10:25:21", "2019-09-01 11:10:34", "2019-09-02 00:10:45"), `End time` = c("2019-09-01 06:03:09", "2019-09-01 10:26:22", "2019-09-01 11:11:36", "2019-09-01 18:11:47"), check.names = FALSE ) # 转换时间格式 df <- df %>% mutate( across(c(`Start time`, `End time`), ~as.POSIXct(.x, format = "%Y-%m-%d %H:%M:%S")) ) # 新增difftime列,计算间隔(单位:小时) df <- df %>% mutate( difftime = as.numeric(difftime(`Start time`, lag(`End time`), units = "hours")) ) # 如果需要示例里带说明的文本格式展示列,可以再加一步 df <- df %>% mutate( difftime_display = case_when( is.na(difftime) ~ NA_character_, TRUE ~ paste0(round(difftime, 2), " hour(", format(`Start time`, "%Y-%m-%d %H:%M:%S"), "-", format(lag(`End time`), "%Y-%m-%d %H:%M:%S"), ")") ) )
基础R版本(无需额外安装包)
# 转换时间格式 df$`Start time` <- as.POSIXct(df$`Start time`, format = "%Y-%m-%d %H:%M:%S") df$`End time` <- as.POSIXct(df$`End time`, format = "%Y-%m-%d %H:%M:%S") # 计算间隔时间 df$difftime <- c(NA, as.numeric(difftime(df$`Start time`[-1], df$`End time`[-nrow(df)], units = "hours")))
结果验证
按示例数据计算得到的difftime列值依次为:NA、4.37、0.74、12.98,符合计算逻辑。
内容的提问来源于stack exchange,提问作者GuiW
相关产品推荐
相关产品推荐

