R中如何计算dd-mm-yyyy hh:mm格式字符型时间的小时差(偏好dplyr/lubridate)
基于dplyr+lubridate的间隔小时计算方案
前置准备
需要加载两个核心包完成计算:
library(dplyr):支持管道操作、结构化新增表变量library(lubridate):精准匹配自定义格式的字符型时间解析
可直接运行的计算代码
完全适配你提供的字符型时间格式(dd-mm-yyyy hh:mm),生成的新变量自动保留1位小数:
# 加载依赖包 library(dplyr) library(lubridate) # 计算time1与time2的间隔小时,生成新协变量 u <- u %>% mutate( new = round( as.numeric( # 按时间格式解析两个时间值,计算time2相对time1的小时差 difftime(dmy_hm(time2), dmy_hm(time1), units = "hours") ), digits = 1 ) )
运行效果验证
基于你提供的示例测试数据,执行上述代码后查看表结构的输出为:
> head(u) time1 time2 new 1 30-01-2020 07:20 14-02-2020 15:34 368.2 2 25-04-2019 15:05 27-04-2019 10:56 43.9 3 11-01-2019 22:01 12-01-2019 00:42 2.7 4 11-01-2019 22:01 23-01-2019 10:08 276.1 5 17-04-2018 07:55 20-04-2018 11:04 75.2
关键说明
- 代码中使用的 dmy_hm() 函数完全匹配你数据里“日-月-年 时:分”的格式规则,不会出现月、日顺序错配的解析错误
- 时间差计算默认返回
time2 - time1的数值结果,若time2早于time1会自动得到负值,符合常规协变量的计算逻辑 - 若需要计算无方向的绝对间隔值,可在
as.numeric()外层嵌套 abs() 函数取绝对值 - 若存在格式异常的时间记录,可通过
is.na(dmy_hm(u$time1))快速定位解析失败的行
内容的提问来源于stack exchange,提问作者cmirian
相关产品推荐
相关产品推荐

