在R语言中如何处理两种不同格式的字符型日期?
解决混合格式日期解析出现NA的问题
你的问题出在as.Date()默认只识别ISO标准日期格式(YYYY-MM-DD),而你的数据里同时存在另一种"月份全称+日+年"的格式,直接调用as.Date()会无法解析第二种格式,导致大量NA。
下面提供两种解决方法:
方法一:基础R实现(无需额外包)
先尝试解析ISO格式,再对未解析成功的NA值用对应格式处理:
date <- c("October 05, 2018", "2003-10-19") # 第一步:先解析ISO格式的日期 date_parsed <- as.Date(date) # 第二步:定位NA值,用"%B %d, %Y"格式解析剩余日期 # %B 匹配英文月份全称,%d 匹配两位日期,%Y 匹配四位年份 na_pos <- is.na(date_parsed) date_parsed[na_pos] <- as.Date(date[na_pos], format = "%B %d, %Y") date_parsed # 输出:[1] "2018-10-05" "2003-10-19"
如果是数据框中的列,只需把date替换成你的列名(比如df$date_column)即可。
方法二:用lubridate包简化操作
lubridate包的parse_date_time()可以自动识别多种日期格式,更高效:
# 先安装包(首次使用时执行) install.packages("lubridate") library(lubridate) date <- c("October 05, 2018", "2003-10-19") # orders参数指定要尝试的格式:"Ymd"对应YYYY-MM-DD,"BdY"对应月份全称+日+年 date_parsed <- parse_date_time(date, orders = c("Ymd", "BdY")) # 若需要Date类型而非POSIXct,可转成Date date_parsed <- as.Date(date_parsed) date_parsed # 输出:[1] "2018-10-05" "2003-10-19"
内容的提问来源于stack exchange,提问作者Nine tailed fox
相关产品推荐
相关产品推荐

