You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 16:38:13