R中使用lubridate包解析带T日期字符串返回NA如何解决
报错核心原因
mdy_hms()默认固定按月、日、年的顺序识别日期字段,你的输入字符串是「年-月-日」排序的ISO标准时间格式,字段顺序和函数预期不匹配,所以解析失败返回NA。
之前parse_date_time()调用失败,是因为你传入了带%的完整strptime格式串,该函数的orders参数需要传入简化的字段顺序标记,无法识别完整格式写法。
可行解决方案
你不需要保留时间部分,以下三种方法都可以直接得到R识别的标准Date类型,最终结果都是2020-07-10,自动丢弃时分秒部分:
- 方法1:用lubridate匹配格式的解析函数
对应年-月-日的时间格式,直接换用ymd_hms()即可,函数会自动识别T分隔的时间串,不需要手动写完整格式参数,解析后转Date类型即可:library(lubridate) date_res <- as.Date(ymd_hms("2020-07-10T00:00:00", tz = Sys.timezone())) - 方法2:基础R直接截断转换(无需加载第三方包,效率最高)
你的输入格式固定,前10位字符就是完整的年-月-日日期段,直接截取后用基础函数转换即可:date_res <- as.Date(substr("2020-07-10T00:00:00", 1, 10)) - 方法3:修正
parse_date_time()的参数
给orders参数传入正确的简化顺序标记即可正常解析,之后转Date类型丢弃时间:library(lubridate) date_res <- as.Date(parse_date_time("2020-07-10T00:00:00", orders = "ymdHMS", tz = Sys.timezone()))
内容的提问来源于stack exchange,提问作者four-eyes
相关产品推荐
相关产品推荐

