R:gsub - 替换月份(当前数字为实际月份数)

时间:2015-03-03 04:24:01

标签: r

我有一个带有列的数据框:“Mes”......它是一个数字向量。 1月1日,2月2日,依此类推。但我需要几个月的名字。

这是我的代码:

我能做些什么才能得到我需要的东西?

例如“Diciembre”转变为:“EneroFebrero”。

df$Mes <- gsub(1, "Enero", df$Mes)
df$Mes <- gsub(2, "Febrero", df$Mes)
df$Mes <- gsub(3, "Marzo", df$Mes)
df$Mes <- gsub(4, "Abril", df$Mes)
df$Mes <- gsub(5, "Mayo", df$Mes)
df$Mes <- gsub(6, "Junio", df$Mes)
df$Mes <- gsub(7, "Julio", df$Mes)
df$Mes <- gsub(8, "Agosto", df$Mes)
df$Mes <- gsub(9, "Setiembre", df$Mes)
df$Mes <- gsub(10, "Octubre", df$Mes)
df$Mes <- gsub(11, "Noviembre", df$Mes)
df$Mes <- gsub(12, "Diciembre", df$Mes)

结果:

当我申请:“unique(df $ Mes)”:得到这个:

 [1] "Enero"        "Febrero"      "Marzo"        "Abril"        "Mayo"         "Junio"       
 [7] "Julio"        "Agosto"       "Setiembre"    "Enero0"       "EneroEnero"   "EneroFebrero"

1 个答案:

答案 0 :(得分:3)

问题是gsub(1, ...)会匹配&#34; 1&#34;在&#34; 1&#34;,&#34; 10&#34;,&#34; 11&#34;和&#34; 12&#34;,除非你用&#34; ^&#限制它34;和&#34; $&#34; (例如,gsub("^1$", "Enero", Mes))或者除非您在gsub代码的长列表中从12变为1。

更简单的方法可能是使用factor或基于索引的基本匹配。

示例:

set.seed(1)
Mes <- sample(12, 20, TRUE)

index <- c("Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", 
           "Agosto", "Setiembre", "Octubre", "Noviembre", "Diciembre")

index[Mes]
#  [1] "Abril"     "Mayo"      "Julio"     "Noviembre" "Marzo"     "Noviembre"
#  [7] "Diciembre" "Agosto"    "Agosto"    "Enero"     "Marzo"     "Marzo"    
# [13] "Setiembre" "Mayo"      "Octubre"   "Junio"     "Setiembre" "Diciembre"
# [19] "Mayo"      "Octubre"  
factor(Mes, levels = 1:12, labels = index)
#  [1] Abril     Mayo      Julio     Noviembre Marzo     Noviembre Diciembre Agosto   
#  [9] Agosto    Enero     Marzo     Marzo     Setiembre Mayo      Octubre   Junio    
# [17] Setiembre Diciembre Mayo      Octubre  
# 12 Levels: Enero Febrero Marzo Abril Mayo Junio Julio Agosto Setiembre ... Diciembre