R 在select中构造变量名_
我正在尝试编写一个函数,该函数将(部分)通过组合其源数据帧和现有变量名来重命名变量。本质上,我希望:R 在select中构造变量名_,r,dplyr,R,Dplyr,我正在尝试编写一个函数,该函数将(部分)通过组合其源数据帧和现有变量名来重命名变量。本质上,我希望: df1 <- data.frame(a = 1, b = 2) 但我想通过编程来实现这一点,大致如下: fun <- function(df, var) { outdf <- rename_(df, paste(df, var, sep = "_") = var) return(outdf) } fun不确定这是否是dplyr风格的正确方式,但它会让你继续 fun
df1 <- data.frame(a = 1, b = 2)
但我想通过编程来实现这一点,大致如下:
fun <- function(df, var) {
outdf <- rename_(df, paste(df, var, sep = "_") = var)
return(outdf)
}
fun不确定这是否是dplyr风格的正确方式,但它会让你继续
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
funlazyeval在这里并不真正需要,因为两个输入的环境都是已知的。也就是说:
library(lazyeval)
library(dplyr)
library(magrittr)
fun = function(df, var) {
df_ = lazy(df)
var_ = lazy(var)
fun_(df_, var_)
}
fun_ = function(df_, var_) {
new_var_string =
paste(df_ %>% as.character %>% extract(1),
var_ %>% as.character %>% extract(1),
sep = "_")
dots = list(var_) %>% setNames(new_var_string)
df_ %>%
lazy_eval %>%
rename_(.dots = dots)
}
fun(df1, a)
对于df1
,您只希望新名称为df_a
,而不是df1_a
?对不起,输入错误-应该是df1_a作为交叉参考,这建立在以下地址的答案和讨论基础上:在BaserLand,您可以做到:有趣是的,到目前为止,在这种情况下,基R似乎会更容易,因为这一个对于多个列来说变得更复杂。当然,你们都是正确的-这是我无法解决的问题之一,我无法放手。。。
library(lazyeval)
library(dplyr)
library(magrittr)
fun = function(df, var) {
df_ = lazy(df)
var_ = lazy(var)
fun_(df_, var_)
}
fun_ = function(df_, var_) {
new_var_string =
paste(df_ %>% as.character %>% extract(1),
var_ %>% as.character %>% extract(1),
sep = "_")
dots = list(var_) %>% setNames(new_var_string)
df_ %>%
lazy_eval %>%
rename_(.dots = dots)
}
fun(df1, a)