我正在尝试翻译具有月份数的数据框上的列(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)
答案 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
的匹配导致11
或1
2
或12
等"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))