R语言处理部分缺失秒数的时间戳时strptime返回NA如何解决
问题原因
你的时间字段存在两种格式:秒数非0时为%Y-%m-%dT%H:%M:%S格式,秒数为:00时自动截断秒字段,变为%Y-%m-%dT%H:%M格式。使用固定单格式的strptime解析时,格式不匹配的截断行会被识别为NA。
可行解决方案
方案1:使用lubridate包自动适配格式(最简便)
lubridate包的时间解析函数支持自动识别多格式时间串,可通过参数允许缺失时间层级,无需手动预处理:
# 未安装lubridate时先运行安装命令 # install.packages("lubridate") library(lubridate) source1$Time_TSS <- ymd_hms(source1$Time_TS, truncated = 1)
参数truncated = 1表示允许时间串最多缺失1个时间层级(此处为缺失秒级字段),截断到分钟的时间会自动补:00秒,不会返回NA。
方案2:Base R 预处理补全时间串后解析
不想安装第三方包时,可先判断字符串长度补全缺失的秒字段,再统一解析:
# 截断到分钟的时间串长度为16位,带秒的完整时间串长度为19位,给短串补:00 fixed_time <- ifelse( nchar(source1$Time_TS) == 16, paste0(source1$Time_TS, ":00"), source1$Time_TS ) # 格式统一后再用strptime解析即可 source1$Time_TSS <- strptime(fixed_time, '%Y-%m-%dT%H:%M:%S')
解析效果验证
用提供的示例数据测试,原本返回NA的2022-06-22T18:49、2022-06-22T18:50两行,会被正确解析为2022-06-22 18:49:00、2022-06-22 18:50:00,无缺失值。
内容的提问来源于stack exchange,提问作者thentangler
相关产品推荐
相关产品推荐

