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

R语言中字符型日期转Date格式失败,求解决方案

解决字符型日期转Date格式出现大量NA的问题

问题根源

  1. 系统时间区域为法语(LC_TIME=French_France.utf8),但日期字符串中的月份是英文缩写(如"Jun"),解析函数无法识别匹配。
  2. 你使用的格式符%y对应两位年份,但实际日期是四位年份(如2022),应使用%Y。

解决方案

方案1:临时切换英文时间区域解析(推荐)

先临时修改时间区域为英文,完成转换后恢复原设置,避免影响其他操作:

# 保存当前时间区域设置
old_time_locale <- Sys.getlocale("LC_TIME")

# 临时切换为英文时间区域
Sys.setlocale("LC_TIME", "English_US.utf8")

# 转换日期(注意用%Y匹配四位年份)
rv_data_USDC_DAILY$Date <- as.Date(rv_data_USDC_DAILY$Date, format = "%b-%d-%Y")

# 恢复原时间区域设置
Sys.setlocale("LC_TIME", old_time_locale)

方案2:用lubridate包独立解析(无需修改区域)

使用lubridate包的parse_date_time函数,直接指定英文区域解析:

# 先安装lubridate包(如果未安装)
# install.packages("lubridate")

library(lubridate)
# 解析日期并指定英文区域
rv_data_USDC_DAILY$Date <- parse_date_time(rv_data_USDC_DAILY$Date, 
                                           orders = "%b-%d-%Y", 
                                           locale = "en_US.UTF-8")
# 转为Date类型(可选,若需要POSIXct类型可跳过)
rv_data_USDC_DAILY$Date <- as.Date(rv_data_USDC_DAILY$Date)

验证测试

用你提供的前5条数据测试方案1:

test_data <- structure(list(Date = c("Jun-29-2022", "Jun-28-2022", "Jun-27-2022", 
"Jun-26-2022", "Jun-25-2022")), row.names = c(NA, 5L), class = "data.frame")

old_time_locale <- Sys.getlocale("LC_TIME")
Sys.setlocale("LC_TIME", "English_US.utf8")
test_data$Date <- as.Date(test_data$Date, format = "%b-%d-%Y")
Sys.setlocale("LC_TIME", old_time_locale)

print(test_data$Date)
# 输出结果:
# [1] "2022-06-29" "2022-06-28" "2022-06-27" "2022-06-26" "2022-06-25"

内容的提问来源于stack exchange,提问作者user17401508

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 01:45:35