R:重命名数据框中的变量子集

Eri*_*ail 2 r rename base gsub

我正在重命名数据框中的大多数变量,我的方法并没有给我留下太深刻的印象.

因此,SO上的任何人是否有更智能或更快的方式,而下面仅使用基数?

    data(mtcars)
  # head(mtcars)


  temp.mtcars <- mtcars
  names(temp.mtcars) <- c((x <- c("mpg", "cyl", "disp")), 
                           gsub('^', "baR.", setdiff(names (mtcars),x)))
  str(temp.mtcars)
  'data.frame': 32 obs. of  11 variables:
   $ mpg     : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
   $ cyl     : num  6 6 4 6 8 6 8 4 4 6 ...
   $ disp    : num  160 160 108 258 360 ...
   $ baR.hp  : num  110 110 93 110 175 105 245 62 95 123 ...
   $ baR.drat: num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
   $ baR.wt  : num  2.62 2.88 2.32 3.21 3.44 ...
   $ baR.qsec: num  16.5 17 18.6 19.4 17 ...
   $ baR.vs  : num  0 0 1 1 0 1 0 1 1 1 ...
   $ baR.am  : num  1 1 1 0 0 0 0 0 0 0 ...
   $ baR.gear: num  4 4 4 3 3 3 3 4 4 4 ...
   $ baR.carb: num  4 4 1 1 2 1 4 2 2 4 ...
Run Code Online (Sandbox Code Playgroud)

And*_*rie 7

仅使用基数R编辑回答

该包装plyr具有方便的功能rename(),可以满足您的要求.您修改的问题仅指定使用基数R. 一种简单的方法是简单地复制代码plyr::rename并创建自己的函数.

rename <- function (x, replace) {
  old_names <- names(x)
  new_names <- unname(replace)[match(old_names, names(replace))]
  setNames(x, ifelse(is.na(new_names), old_names, new_names))
}
Run Code Online (Sandbox Code Playgroud)

该函数rename采用一个名为向量的参数,其中向量的元素是新名称,向量的名称是现有名称.有许多方法可以构造这样一个命名向量.在下面的例子中,我只是使用structure.

x <- c("mpg", "disp", "wt")
some.names <- structure(paste0("baR.", x), names=x)
some.names
       mpg       disp         wt 
 "baR.mpg" "baR.disp"   "baR.wt" 
Run Code Online (Sandbox Code Playgroud)

现在您已准备好重命名:

mtcars  <- rename(mtcars, replace=some.names)
Run Code Online (Sandbox Code Playgroud)

结果:

'data.frame':   32 obs. of  11 variables:
 $ baR.mpg : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
 $ cyl     : num  6 6 4 6 8 6 8 4 4 6 ...
 $ baR.disp: num  160 160 108 258 360 ...
 $ hp      : num  110 110 93 110 175 105 245 62 95 123 ...
 $ drat    : num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
 $ baR.wt  : num  2.62 2.88 2.32 3.21 3.44 ...
 $ qsec    : num  16.5 17 18.6 19.4 17 ...
 $ vs      : num  0 0 1 1 0 1 0 1 1 1 ...
 $ am      : num  1 1 1 0 0 0 0 0 0 0 ...
 $ gear    : num  4 4 4 3 3 3 3 4 4 4 ...
 $ carb    : num  4 4 1 1 2 1 4 2 2 4 ...
Run Code Online (Sandbox Code Playgroud)