R语言字符型日期时间格式转换运行返回NA问题求助
问题原因
strptime、as.POSIXct的format参数用于匹配输入的原始字符格式,而非你想要输出的目标格式,这是解析失败的核心原因。你当前填写的"%Y-%m-%d %H:%M:%OS"是目标输出格式,和原始输入的20170929 20:59:56.149结构完全不匹配:原始日期部分为无分隔符的年+月+日拼接格式,你填写的format里额外加了横杠,导致解析器无法识别,返回NA。- 你写的format参数中,日期和时间之间设置了两个空格,而原始示例中两者仅间隔1个空格,也会触发匹配失败的问题。
解决方法
时间转换需要分为两步:先正确解析原始字符为POSIX时间类型,再按需求格式化为目标字符格式。
第一步:正确解析原始时间字符串
根据你给出的原始示例结构,将format参数改为和输入完全匹配的规则即可:
# 方法1:用strptime解析 time_parsed <- strptime(data$time, format = "%Y%m%d %H:%M:%OS", tz = "GMT") # 方法2:用as.POSIXct解析,直接覆盖原列 data$time <- as.POSIXct(data$time, format = "%Y%m%d %H:%M:%OS", tz = "GMT")
第二步:格式化为目标格式(仅需要字符输出时操作)
如果需要得到%Y-%m-%d %H:%M:%OS格式的字符变量,可通过format()函数转换:
data$time_formatted <- format(data$time, format = "%Y-%m-%d %H:%M:%OS")
如果不需要转为字符类型,解析完成的POSIX时间对象默认打印时就会显示带横杠的标准时间格式,无需额外处理。
测试示例
test_input <- "20170929 20:59:56.149" parsed_time <- as.POSIXct(test_input, format = "%Y%m%d %H:%M:%OS", tz = "GMT") print(parsed_time) # 输出结果:2017-09-29 20:59:56.149 GMT
内容的提问来源于stack exchange,提问作者sid9715
相关产品推荐
相关产品推荐

