我正在尝试编写一个函数,该函数将(部分)通过组合其源数据帧和现有变量名称来重命名变量。本质上,我想要:
df1 <- data.frame(a = 1, b = 2)
成为:
df1 %>%
rename(df1_a = a)
# df1_a b
#1 1 2
但我想以编程方式执行此操作,大致如下:
fun <- function(df, var) {
outdf <- rename_(df, paste(df, var, sep = "_") = var)
return(outdf)
}
这种公认的幼稚方法显然行不通,但我一直无法弄清楚。我确定答案就在
nse
中小插图( https://cran.r-project.org/web/packages/dplyr/vignettes/nse.html ),但这似乎没有解决构造变量名称的问题。
最佳答案
不确定这是否是正确的 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
关于r - 在 select_ 中构造变量名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33027914/