使用as.Date转换"Sat 12 Sep"字符日期时返回NA的问题求助
解决as.Date转换日期返回NA的问题
嘿,我来帮你搞定这个日期转换返回NA的问题~
问题根源
你用as.Date(FECHA, "%a %d %b")返回NA,大概率是因为R的默认语言环境(locale)不识别日期里的英文缩写。%a(星期缩写,比如"Sat")和%b(月份缩写,比如"Sep")的解析完全依赖当前系统的locale设置,如果你的R默认是西班牙语或者其他非英文环境,就没法识别这些英文缩写,自然返回NA啦。
两种可行解决方案
方案1:临时切换到英文locale
先把R的时间相关locale改成英文,转换完日期再切回去,不影响其他操作:
# 先保存当前的locale设置,方便之后恢复 original_locale <- Sys.getlocale("LC_TIME") # 区分Windows和其他系统设置英文locale if (.Platform$OS.type == "windows") { Sys.setlocale("LC_TIME", "English") } else { Sys.setlocale("LC_TIME", "en_US.UTF-8") } # 现在再转换日期就没问题了 df <- df %>% mutate(DATE = as.Date(FECHA, "%a %d %b")) # 恢复原来的locale设置 Sys.setlocale("LC_TIME", original_locale)
方案2:用lubridate包一键搞定(更省心)
lubridate包对日期格式的兼容性超强,不用手动指定格式字符串就能识别:
首先安装并加载包:
install.packages("lubridate") library(lubridate)
然后直接转换:
df <- df %>% mutate(DATE = dmy(FECHA))
dmy()会自动识别"Sat 12 Sep"这种格式,完全不用纠结locale的问题~
额外提示
如果你的数据对应的不是当前年份,还可以手动指定年份,比如要转成2020年的日期:
# 用base R的话 df <- df %>% mutate(DATE = as.Date(paste(FECHA, "2020"), "%a %d %b %Y")) # 用lubridate的话 df <- df %>% mutate(DATE = dmy(paste(FECHA, "2020")))
内容的提问来源于stack exchange,提问作者Pablo Hernandez Vicente
相关产品推荐
相关产品推荐

