替换许多不同的角色"逐个"? [R

时间:2015-03-09 17:19:44

标签: r

我偶尔会遇到以下问题:我想用“更好”的字符替换对象中的多个字符。例如,我想将隐秘变量名称更改为表中的可读变量名称以供发布,或者我想更改数据框中变量的名称。我通常最终会实施一份副本&粘贴溶液。例如,

 dat <- mtcars
 names(dat) <- gsub("mpg", "Miles", names(dat))
 names(dat) <- gsub("cyl", "Cylinder", names(dat))
 ... etc

这里的模式总是一样的:拿一个带名字的对象(这里是数据框中变量的名称,但它可能只是任何向量中的字符)并用其他元素替换一些元素,然后重复。

我正在寻找更有效地做到这一点的方法。例如,我一直在考虑这些问题:

 from <- c("mpg", "cyl")
 to   <- c("Miles", "Cylinder")
 names(dat) <- magic.function(from, to, names(dat))
 # ok, does not look like a big improvement, unless you think of 20 or 30 names...

我正在寻找能够实现与以下for相同的东西 - 循环:

 for(i in seq_along(from)){
      names(dat) <- gsub(from[i], to[i], names(dat))
 }

但是以更优雅(即无循环)的方式。虽然我自己很容易实现这样的功能,但是在基础或某些包中可能已经有了内置功能。有谁知道这样的功能?

1 个答案:

答案 0 :(得分:3)

我会建议像这样的“stringi”包:

library(stringi)
stri_replace_all_fixed(names(dat), from, to, vectorize_all = FALSE)
#  [1] "Miles"    "Cylinder" "disp"     "hp"       "drat"     "wt"      
#  [7] "qsec"     "vs"       "am"       "gear"     "carb"