You need to enable JavaScript to run this app. R中如何计算dd-mm-yyyy hh:mm格式字符型时间的小时差(偏好dplyr/lubridate)
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.06 22:24:03