as.POSIXct转换字符时间为NA求助:合并含毫秒级时间的R数据文件
解决毫秒级时间列的格式统一与文件合并问题
问题分析
第一个文件的「Begin Time - hh:mm:ss.ms」列是mm:ss.S格式的字符串(例如"06:18.4"代表00时06分18秒400毫秒),你之前用了适用于完整日期时间的%Y-%m-%d %H:%M:%OS格式解析,导致匹配失败生成NA;第二个文件的该列已经是标准的POSIXct格式,无需额外转换。
解决方案
方法1:基础R函数处理
先将第一个文件的字符串时间转换为带日期的POSIXct格式,和第二个文件保持一致:
# 处理第一个文件的时间列 df$`Begin Time - hh:mm:ss.ms` <- as.POSIXct( paste("1899-12-31 00:", df$`Begin Time - hh:mm:ss.ms`, sep = ""), format = "%Y-%m-%d %H:%M:%OS", tz = "UTC" # 指定时区避免歧义 ) # 验证转换结果 str(df$`Begin Time - hh:mm:ss.ms`)
方法2:使用lubridate包简化操作
如果安装了lubridate包,处理分秒格式会更直观:
library(lubridate) # 将字符串转换为时间段,再转为带指定日期的POSIXct df$`Begin Time - hh:mm:ss.ms` <- ymd_hms("1899-12-31 00:00:00", tz = "UTC") + ms(df$`Begin Time - hh:mm:ss.ms`)
保留毫秒显示
如果需要在输出中看到完整的毫秒,可先设置全局选项:
options(digits.secs = 3)
合并文件
确认两个文件的时间列格式一致后,即可合并:
merged_df <- rbind(df, df2)
验证转换结果
转换后第一个文件的时间列应和第二个文件的格式一致,示例输出:
# 第一个文件转换后的时间列 [1] "1899-12-31 00:06:18.400 UTC" "1899-12-31 00:06:27.000 UTC"
内容的提问来源于stack exchange,提问作者Anjana Lakshmi
相关产品推荐
相关产品推荐

