2015-03-03 84 views
0

我有一个列:“Mes”的数据框...它是一个数字向量。它有1月1日,2月2日,等等。但我需要几个月的名字。R:gsub - 将月份(目前的数字换成月份的实际名称)

这是我的代码:

我能做些什么来得到我需要什么?

例如“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) 

结果:

当我申请: “唯一(DF $ MES)”:得到这个:

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

而不是'gsub',为什么不使用'function'或基本匹配? – A5C1D2H2I1M1N2O1R2T1 2015-03-03 04:24:47

+0

您可否详细解答一下答案?谢谢 – 2015-03-03 04:25:44

+2

尝试'month.name [sample(1:12)]' – akrun 2015-03-03 04:26:46

回答

3

的问题是,gsub(1, ...)将在符合 “1”除非您使用“^”和“$”(例如,gsub("^1$", "Enero", Mes))或除非您在gsub代码的较长列表中从12变为1,否则不要使用“1”,“10”,“11”和“12” 。

更简单的方法可能是使用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 
+2

[这个问题]的第一个答案(http://stackoverflow.com/questions/5869539/confusion-between-factor-levels-and-factor-labels)可能对那些不熟悉facotrs的人有帮助。 – Jthorpe 2015-03-03 04:33:38

+0

谢谢,但用gsub我试过这个:'df $ Mes < - gsub(^ 1 $,“Enero”,df $ Mes),但get:Error:意外的'^'in“df $ Mes < - gsub (^“' – 2015-03-03 04:37:21

+0

@OmarGonzales,加引号。 – A5C1D2H2I1M1N2O1R2T1 2015-03-03 04:38:05

相关问题