You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言字符转带时分的日期格式及计算时间差问题

解决方案

完整实现代码

# 若未安装lubridate包,先执行:install.packages("lubridate")
library(lubridate)

# 原始数据
start <- c("2022-01-10 9:35PM","2022-01-10 10:35PM")
end <- c("2022-01-11 7:00AM","2022-01-11 8:00AM")
dat <- data.frame(start,end)

# 1. 转换为24小时制的日期时间格式
dat$start_dt <- mdy_hm(dat$start)
dat$end_dt <- mdy_hm(dat$end)

# 2. 计算时间差(小时为单位)
dat$diff <- as.numeric(difftime(dat$end_dt, dat$start_dt, units = "hours"))

# 3. 添加指定ID列
dat$ID <- c(101, 101)

# 整理为目标显示格式(将日期时间转为字符型)
dat$start <- format(dat$start_dt, "%Y-%m-%d %H:%M")
dat$end <- format(dat$end_dt, "%Y-%m-%d %H:%M")

# 保留所需列
dat <- dat[, c("ID", "start", "end", "diff")]

print(dat)

分步说明

1. 日期时间格式转换

  • 使用lubridate包的mdy_hm()函数可直接识别带AM/PM的字符串,自动转换为标准POSIXct日期时间类型(天然是24小时制)。
  • 若不想用第三方包,可使用基础R的strptime():
    dat$start_dt <- strptime(dat$start, "%Y-%m-%d %I:%M%p")
    dat$end_dt <- strptime(dat$end, "%Y-%m-%d %I:%M%p")
    
    其中%I代表12小时制小时数,%p匹配AM/PM标识。

2. 时间差计算

  • 用difftime()计算两个日期时间的差值,指定units = "hours"后转为数值型,得到精确小时数:
    • 第一行实际差值:2022-01-10 21:35到2022-01-11 07:00,结果为9.4167小时(约9小时25分钟)
    • 第二行实际差值:2022-01-10 22:35到2022-01-11 08:00,结果为9.4167小时(约9小时25分钟)
  • 若需要整数小时,可使用round()或floor()处理:
    # 四舍五入到整数
    dat$diff <- round(dat$diff)
    # 向下取整
    dat$diff <- floor(dat$diff)
    

3. 添加ID列

直接给数据框新增列并赋值即可:

dat$ID <- c(101, 101)

最终输出示例

ID               start                 end      diff
1 101 2022-01-10 21:35 2022-01-11 07:00 9.416667
2 101 2022-01-10 22:35 2022-01-11 08:00 9.416667

内容的提问来源于stack exchange,提问作者Bruh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 18:55:18