R语言中字符型日期转Date格式失败,求解决方案
解决字符型日期转Date格式出现大量NA的问题
问题根源
- 系统时间区域为法语(
LC_TIME=French_France.utf8),但日期字符串中的月份是英文缩写(如"Jun"),解析函数无法识别匹配。 - 你使用的格式符
%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
相关产品推荐
相关产品推荐

