西班牙语中月份名称的数字

时间:2017-10-29 13:40:04

标签: r date

我正在尝试翻译具有月份数的数据框上的列(1月为1,2月为2,依此类推),所以我想将这些数字翻译成西班牙月份名称。 首先我试过了:

df$month <- month.name[df$month]

工作正常,但输出显示英文名称。

然后我尝试使用gsub:

num <- c(1,2,3,4,5,6,7,8,9,10,11,12)
meses <- c("Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio",
        "Agosto","Septiembre","Octubre","Noviembre","Diciembre")
gsub2 <- function(pattern, replacement, x, ...) {
  for(i in 1:length(pattern))
    x <- gsub(pattern[i], replacement[i], x, ...)
  x
}
df$month <- gsub2(num, meses,df$month)

但是使用此代码,我的输出如下:

"Enero"        "Febrero"      "Marzo"     "Abril"        "Mayo"        
 "Junio"        "Julio"        "Agosto"    "Septiembre"  "Enero0"           "EneroEnero"   "EneroFebrero"

我知道发生了什么,但我不知道如何解决它。提前谢谢。

编辑:

df$month <- c(1, 2, 3, 4, 5, 6 ,7, 8, 9, 10, 11, 12)

1 个答案:

答案 0 :(得分:2)

使用矢量化

可以更好地解决这个问题,而不是使用正则表达式
unname(setNames(meses, num)[tabla$month])
#[1] "Abril"      "Marzo"      "Septiembre" "Julio"      "Agosto"     "Diciembre"  "Abril"      "Octubre"    "Octubre"    "Abril"      "Agosto"     "Mayo"      
#[13] "Septiembre" "Septiembre" "Abril"      "Noviembre"  "Marzo"      "Enero"      "Julio"      "Febrero"   

并且相应的tabla$month

tabla$month
#[1]  4  3  9  7  8 12  4 10 10  4  8  5  9  9  4 11  3  1  7  2

关于regex的使用,我们可能需要添加开头(^)和结束($)以避免多次获得1的匹配导致111

212"EneroEnero""EneroFebrero"
gsub2 <- function(pattern, replacement, x, ...) {
   for(i in 1:length(pattern))
   x<- gsub(paste0("^", pattern[i], "$"), replacement[i], x , ...)
  x
 }

gsub2(num, meses,tabla$month)
#[1] "Abril"      "Marzo"      "Septiembre" "Julio"      "Agosto"     "Diciembre"  "Abril"      "Octubre"    "Octubre"    "Abril"      "Agosto"     "Mayo"      
#[13] "Septiembre" "Septiembre" "Abril"      "Noviembre"  "Marzo"      "Enero"      "Julio"      "Febrero"   

数据

set.seed(24)
tabla <- data.frame(month = sample(1:12, 20, replace = TRUE))