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

在R语言中计算混合格式日期的天数差

在R中计算混合格式日期的天数差

原始数据集

testdata <- data.frame(id = c(1,2,3),
                   date1 = c("2022/11/13 9:19:03 AM PST", "2022-11-01","2022-10-28"),
                   date2 = c("2022/12/12 1:52:29 PM PST","2022-10-21","2022/12/01 8:15:25 AM PST"))

print(testdata)
#   id                     date1                     date2
# 1  1 2022/11/13 9:19:03 AM PST 2022/12/12 1:52:29 PM PST
# 2  2                2022-11-01                2022-10-21
# 3  3                2022-10-28 2022/12/01 8:15:25 AM PST

实现步骤

要提取日期部分并计算天数差,按以下操作即可:

  1. 提取纯日期字符串:用正则表达式移除空格后的所有内容(时分秒、时区信息),保留原始日期格式:
testdata$date1_clean <- sub(" .*", "", testdata$date1)
testdata$date2_clean <- sub(" .*", "", testdata$date2)
  1. 计算天数差:将提取的日期字符串转为R日期对象,取绝对值得到正的天数差:
testdata$days.diff <- abs(as.Date(testdata$date1_clean) - as.Date(testdata$date2_clean))
  1. 整理输出结果:
df <- testdata[, c("id", "date1_clean", "date2_clean", "days.diff")]
colnames(df) <- c("id", "date1", "date2", "days.diff")

print(df)
#   id       date1       date2 days.diff
# 1  1 2022/11/13 2022/12/12        19
# 2  2 2022-11-01 2022-10-21        11
# 3  3 2022-10-28 2022/12/01        34

关键说明

  • sub(" .*", "", x) 会匹配字符串中第一个空格及之后的所有内容并替换为空,完美提取带时间的日期中的日期部分;对于纯日期字符串,因无空格结果保持不变。
  • as.Date() 可自动识别/和-分隔的日期格式,无需额外指定格式参数。
  • 使用abs()确保天数差为正数,避免因date2早于date1出现负数结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 21:55:15