我偶尔会遇到以下问题:我想用“更好”的字符替换对象中的多个字符。例如,我想将隐秘变量名称更改为表中的可读变量名称以供发布,或者我想更改数据框中变量的名称。我通常最终会实施一份副本&粘贴溶液。例如,
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))
}
但是以更优雅(即无循环)的方式。虽然我自己很容易实现这样的功能,但是在基础或某些包中可能已经有了内置功能。有谁知道这样的功能?
答案 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"