R语言如何转换时间为标准格式并计算连续日期间的小时差
R语言实现方案
核心思路
- 先对缺秒的时间字段补
:00,统一为HH:MM:SS格式 - 合并日期列与格式化后的时间列,生成完整的时间戳列
- 取相邻行的时间戳计算差值,转换为小时单位
完整实现代码
tidyverse套件实现(语法更简洁)
# 未安装依赖包先执行:install.packages(c("dplyr","lubridate")) library(dplyr) library(lubridate) # 原始数据框 newdf=data.frame(date=as.Date(c("2021-01-04","2021-01-05","2021-01-06","2021-01-07")), time=c("10:32:29","11:25","12:18:42","09:58")) # 处理逻辑 result <- newdf %>% # 补全缺失的秒数 mutate(time_std = ifelse(nchar(time) == 5, paste0(time, ":00"), time), # 合并为完整时间戳 full_datetime = ymd_hms(paste(date, time_std))) %>% # 计算与前一天的小时差值,第一行无前置数据返回NA mutate(hour_diff = as.duration(full_datetime - lag(full_datetime)) / dhours(1))
基础R实现(无需额外安装依赖包)
# 原始数据框 newdf=data.frame(date=as.Date(c("2021-01-04","2021-01-05","2021-01-06","2021-01-07")), time=c("10:32:29","11:25","12:18:42","09:58")) # 补全秒数 newdf$time_std <- ifelse(nchar(newdf$time) == 5, paste0(newdf$time, ":00"), newdf$time) # 生成完整时间戳 newdf$full_datetime <- as.POSIXct(paste(newdf$date, newdf$time_std), format = "%Y-%m-%d %H:%M:%S") # 计算连续两天的小时差值 newdf$hour_diff <- c(NA, as.numeric(difftime(tail(newdf$full_datetime, -1), head(newdf$full_datetime, -1), units = "hours")))
结果说明
输出的hour_diff列即为连续两天对应时间的小时差值,首行无前置对照数据返回NA,可根据业务需求自行过滤首行空值。
内容的提问来源于stack exchange,提问作者Migara Devinda
相关产品推荐
相关产品推荐

