R使用lubridate的dmy_hms转换SleepDay字符列为DateTime时出现NA问题
问题原因
- 日期解析顺序不匹配:你使用的
dmy_hms()函数是按照「日-月-年」的顺序解析日期字符串,如果你的SleepDay列实际是「月-日-年」的顺序(比如常见的4/12/2016 12:00:00格式代表4月12日而非12月4日),解析逻辑不匹配就会返回NA,这种情况替换为mdy_hms()函数即可。 - 12小时制标识未适配:如果你的
SleepDay列末尾带有AM/PM的12小时制标记,lubridate默认按照24小时制解析,无法识别12小时制标识也会生成NA,需要手动指定格式适配12小时制,示例代码如下:
sleepDay <- mutate(sleepDay, ActivityDate = mdy_hms(SleepDay, format = "%m/%d/%Y %I:%M:%S %p"))
- 部分值格式异常:如果存在少数字符串缺少年份/时分秒、包含特殊乱码、格式和其他行不统一的情况,也会导致解析失败返回NA,你可以用
which(is.na(sleepDay$ActivityDate))定位解析失败的行,查看原始字符串后针对性调整解析规则。
内容的提问来源于stack exchange,提问作者rish
相关产品推荐
相关产品推荐

