在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
实现步骤
要提取日期部分并计算天数差,按以下操作即可:
- 提取纯日期字符串:用正则表达式移除空格后的所有内容(时分秒、时区信息),保留原始日期格式:
testdata$date1_clean <- sub(" .*", "", testdata$date1) testdata$date2_clean <- sub(" .*", "", testdata$date2)
- 计算天数差:将提取的日期字符串转为R日期对象,取绝对值得到正的天数差:
testdata$days.diff <- abs(as.Date(testdata$date1_clean) - as.Date(testdata$date2_clean))
- 整理输出结果:
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
相关产品推荐
相关产品推荐

