如何在R中合并电子表格的12小时制时间与AM/PM列并转为POSIXt对象
解决12小时制时间转24小时制POSIXct对象的问题
你的代码失效主要有三个原因:
unite函数默认用下划线连接列,导致合并后的字符串格式是日/月/年 时:分_AM,不符合时间解析的标准格式as.POSIXct的格式参数写错了,没有匹配12小时制+AM/PM的格式规则- 存在语法错误:
%>%没写全、变量名不匹配、括号未闭合
修正后的完整代码
首先构造示例数据(和你的样本一致):
library(tidyverse) # 构造示例数据 Timesheet <- tibble( Timesheet = c("8/10/2022 9:00", "8/10/2022 9:01", "8/10/2022 5:00"), `AM-PM` = c("AM", "AM", "PM") )
然后执行合并和转换:
# 合并列并转换为POSIXct对象 Timesheet_processed <- Timesheet %>% # 用空格连接日期时间与AM/PM列,生成标准12小时制字符串 unite("timestamp_12h", c(Timesheet, `AM-PM`), sep = " ", na.rm = FALSE) %>% # 解析为POSIXct,格式匹配日/月/年 + 12小时制时间 + AM/PM mutate(timestamp_posix = as.POSIXct(timestamp_12h, format = "%d/%m/%Y %I:%M %p"))
关键参数说明
unite的sep = " ":必须用空格分隔两列,得到8/10/2022 9:00 AM这种标准格式,才能被as.POSIXct识别as.POSIXct的格式字符串:%d/%m/%Y:对应你的日/月/年日期格式%I:%M:代表12小时制的小时和分钟(注意是大写的I,不是小写l)%p:用于识别AM/PM标识,R会自动将其转换为24小时制时间
验证结果
运行代码后查看处理后的数据:
print(Timesheet_processed)
输出如下,下午5点已转换为24小时制的17:00,且timestamp_posix是标准的POSIXct类型:
# A tibble: 3 × 2 timestamp_12h timestamp_posix <chr> <dttm> 1 8/10/2022 9:00 AM 2022-10-08 09:00:00 2 8/10/2022 9:01 AM 2022-10-08 09:01:00 3 8/10/2022 5:00 PM 2022-10-08 17:00:00
内容的提问来源于stack exchange,提问作者Cole
相关产品推荐
相关产品推荐

