R语言中12小时制转24小时制时输出NA的问题求解
12小时制时间转24小时制的解决方案
基础R实现(无需额外包)
直接用as.POSIXct配合对应格式字符串解析,再转成目标格式:
# 解析12小时制时间为POSIXct类型 accel_dataT$GMT.Time <- as.POSIXct(accel_dataT$GMT.Time, format = "%m/%d/%Y %I:%M:%S %p") # 格式化为要求的"月-日-年 24小时制时间"字符串 accel_dataT$GMT.Time <- format(accel_dataT$GMT.Time, "%m-%d-%Y %H:%M:%S")
格式参数说明:
%m/%d/%Y:匹配输入的"月/日/年"结构%I:对应12小时制的小时数(1-12)%p:识别AM/PM标识- 转换后用
%H输出24小时制小时数,自动完成PM时段的小时加12,同时将日期分隔符从/换成-。
lubridate包实现(更简洁)
之前用ymd_hms无效是因为原数据是月-日-年顺序,改用mdy_hms即可:
library(lubridate) # 解析时间 accel_dataT$GMT.Time <- mdy_hms(accel_dataT$GMT.Time) # 格式化输出 accel_dataT$GMT.Time <- format(accel_dataT$GMT.Time, "%m-%d-%Y %H:%M:%S")
验证结果
处理后的数据框GMT.Time列会变成:
[1] "5-29-2024 13:12:36" "5-29-2024 13:12:38"
之前代码失效的原因
as.POSIXct用错了格式:你写的%Y-%m-%d %H:%M:%OS对应"年-月-日 24小时制时间",和原数据的"月/日/年 12小时制带AM/PM"完全不匹配,所以解析失败返回NA。ymd_hms顺序错误:这个函数期望输入是"年-月-日"开头的时间,原数据是"月/日/年",自然解析不了。chron::times():这个函数只处理纯时间部分(比如"13:12:36"),不支持带日期和AM/PM的完整字符串,所以没用。
内容的提问来源于stack exchange,提问作者SarahLou
相关产品推荐
相关产品推荐

