在select_中构造变量名

ale*_*han 6 r dplyr

我正在尝试编写一个函数,它将(部分)通过组合其源数据框和现有变量名来重命名变量.从本质上讲,我想:

df1 <- data.frame(a = 1, b = 2)
Run Code Online (Sandbox Code Playgroud)

成为:

df1 %>%
  rename(df1_a = a)

#  df1_a b
#1     1 2
Run Code Online (Sandbox Code Playgroud)

但是我想以编程方式执行此操作,类似于:

fun <- function(df, var) {
  outdf <- rename_(df, paste(df, var, sep = "_") = var)
  return(outdf)
}
Run Code Online (Sandbox Code Playgroud)

这种天真的方法显然不起作用,但我无法弄明白.我确定答案就在nse插图中(https://cran.r-project.org/web/packages/dplyr/vignettes/nse.html),但这似乎并不能解决构造变量名称的问题.

Ric*_*ven 8

不确定这是否是正确的dplyr-esque方式,但它会让你去.

fun <- function(df, var) {
    x <- deparse(substitute(df))
    y <- deparse(substitute(var))
    rename_(df, .dots = with(df, setNames(as.list(y), paste(x, y, sep = "_"))))
}

fun(df1, a)
#   df1_a b
# 1     1 2

fun(df1, b)
#   a df1_b
# 1 1     2
Run Code Online (Sandbox Code Playgroud)

  • 在基础R land中,您可以这样做:`fun < - function(df,var){names(df)[%var中的名称(df)%] < - paste(deparse(substitute(df)),var,sep = "_"); df}` - 它还具有矢量化的优点. - `fun(df1,c("a","b"))` (2认同)