字符转时间格式遇NA强制转换问题求助
解决字符型日期时间转POSIX格式的NA问题
问题根源
你的started_at列是月/日/年 时:分格式的字符串(比如"2/7/22 15:47"),但之前的代码犯了两个关键错误:
- 错误地将字符型日期时间转为数字:带斜杠、空格的字符串转数字会直接变成NA,后续转时间自然全是NA。
- 格式字符串不匹配:只指定了时间部分(
%H:%M或%H:%M:%S),完全没匹配日期部分,导致解析失败。
基础R解决方案
使用与输入格式完全匹配的格式字符串"%m/%d/%y %H:%M",直接用as.POSIXct或strptime转换:
# 方法1:用as.POSIXct返回POSIXct类型(推荐用于数据框) start_end$start_time <- as.POSIXct(start_end$started_at, format = "%m/%d/%y %H:%M", tz = "UTC") # 方法2:用strptime返回POSIXlt类型 start_end$start_time <- strptime(start_end$started_at, format = "%m/%d/%y %H:%M", tz = "UTC")
格式字符串说明:
%m:月份(1-12,支持一位数)%d:日期(1-31,支持一位数)%y:两位数年份(22会自动识别为2022)%H:24小时制小时%M:分钟
更简便的lubridate方案
如果安装了lubridate包,它的mdy_hm()函数可以自动识别这种格式,无需手动写格式字符串:
library(lubridate) start_end$start_time <- mdy_hm(start_end$started_at, tz = "UTC")
内容的提问来源于stack exchange,提问作者Khadidja Diakite
相关产品推荐
相关产品推荐

