使用strptime转换字符日期字符串时为何始终返回NA?
问题原因及解决办法
你的转换代码存在两个关键问题:
1. 日期时间格式字符串错误
原数据的时间部分是11:23这类带冒号的格式,但你写的格式字符串里用了%I%M,没有包含冒号,导致R无法匹配时间结构,直接返回NA。正确的时间格式应该写成%I:%M。
2. 区域设置可能影响月份缩写识别
如果你的R运行环境是中文区域,%b(用于匹配英文月份缩写,比如mar/feb/dec)会无法识别——因为中文区域的月份缩写是中文格式,这也会引发转换失败。
修正后的代码
先临时设置区域为英文(确保月份缩写能被识别),再修改格式字符串重新转换:
# 临时切换到英文区域,解决月份缩写识别问题 Sys.setlocale("LC_TIME", "English") # 执行正确的日期时间转换 dora$date_time_info2 <- strptime(dora$date_time_info, "%d%b%Y %I:%M %p")
验证结果
运行后查看数据,就能得到正确的日期时间类型结果:
dora #> date_time_info date_time_info2 #> 1 16mar2012 11:23 PM 2012-03-16 23:23:00 #> 2 04feb2000 8:41 AM 2000-02-04 08:41:00 #> 3 25dec2022 5:55 PM 2022-12-25 17:55:00
内容的提问来源于stack exchange,提问作者Kelsey Nason
相关产品推荐
相关产品推荐

