如何将数据框中加泰罗尼亚语格式的mesos列转为日期格式?
解决西班牙语月份缩写转日期的问题
你的数据中mesos列是西班牙语月份缩写+年份后两位(比如abr22对应2022年4月、ag22对应2022年8月、des22对应2022年12月),之前转换失败是因为lubridate默认识别英文月份缩写,对西班牙语缩写不兼容。以下是两种可行的解决方法:
方法1:手动映射月份缩写(兼容所有系统)
先把西班牙语缩写替换为对应数字月份,再拼接成标准日期格式转换:
library(dplyr) library(lubridate) # 定义西班牙语月份缩写到数字的映射(匹配你的数据格式) mes_map <- c( "ene" = "01", "feb" = "02", "mar" = "03", "abr" = "04", "may" = "05", "jun" = "06", "jul" = "07", "ag" = "08", "sep" = "09", "oct" = "10", "nov" = "11", "des" = "12" ) # 处理数据框 taxa_inflacio_ESP_mesos2022 <- taxa_inflacio_ESP_mesos2022 %>% mutate( # 拆分月份缩写和年份部分 mes_abbr = substr(mesos, 1, nchar(mesos)-2), year = paste0("20", substr(mesos, nchar(mesos)-1, 2)), # 替换为数字月份 mes_num = mes_map[mes_abbr], # 拼接为YYYY-MM-DD格式,转换为日期(默认取当月第一天) mesos = ymd(paste(year, mes_num, "01", sep = "-")) ) %>% # 移除临时辅助列 select(-mes_abbr, -year, -mes_num)
方法2:指定西班牙语语言环境转换
如果你的系统已安装西班牙语locale,可以直接设置语言环境后用parse_date_time转换:
library(lubridate) # 设置西班牙语locale(不同系统写法不同:Linux/macOS用"es_ES.UTF-8",Windows用"Spanish_Spain.1252") Sys.setlocale("LC_TIME", "es_ES.UTF-8") # 用"%b%y"匹配"月份缩写+年份后两位"的格式 taxa_inflacio_ESP_mesos2022$mesos <- parse_date_time(taxa_inflacio_ESP_mesos2022$mesos, orders = "%b%y") # 可选:转换完成后恢复默认语言环境 Sys.setlocale("LC_TIME", "")
注:方法2依赖系统locale支持,若遇到locale设置失败的情况,优先使用方法1更稳妥。
内容的提问来源于stack exchange,提问作者Maria
相关产品推荐
相关产品推荐

