使用`starts_with()`重命名列,新的前缀是一个字符串。

7

在R中,我想要在一个函数内将所有以某个前缀(比如说"oldprefix1"、"oldprefix2"、"oldprefix3"等)开头的列重命名为"newprefix1"、"newprefix2"、"newprefix3"等。以下代码可行:

change = function(df) {
    select(df, newprefix = starts_with('oldprefix') )
}
change(test)

但是,我希望将新前缀的字符串作为参数传递给函数:

change2 = function(df, prefix) {
    dots = paste0(prefix," = starts_with('oldprefix')"
    select_(df, dots)
}
change2(test, "newprefix")

我尝试使用select_().dots,但我无法将它与starts_with()函数一起使用。我收到错误信息:Error in eval(expr, envir, enclos) : could not find function "starts_with"


如果你想要重命名,那么请使用rename_at或者rename_if函数。 - akrun
1
你是否只接受 dplyr 的解决方案?类似 names(df) <- str_replace_all(names(df),"oldprefix","newprefix") 这样的方法会很好地解决问题。 - Michael Bird
1个回答

10

另一种选择是使用rename_at

mtcars %>% 
    rename_at(vars(starts_with('m')), funs(paste0('prefix', .)))

如果要更改旧名称,请使用sub

change2 <- function(df, oldpref, newpref) {
  df %>%
       rename_at(vars(starts_with(oldpref)), funs(sub(oldpref, newpref, .)))


 }

change2(mtcars, "m", "newprefix") %>%
       names
#[1] "newprefixpg" "cyl"         "disp"        "hp"          "drat" 
#[6]   "wt"          "qsec"        "vs"          "am"          "gear" 
#[11] "carb"    

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接