我正在尝试在函数中使用dplyr连接两个表,其中变量名之一由该函数的参数定义。在其他dplyr功能,通常用于非标准评价,如版本select
和select_
,rename
和rename_
等,但不适合_join
家庭。我找到了这个答案,但是无法在下面的代码中使用它:
df1 <- data.frame(gender = rep(c('M', 'F'), 5), var1 = letters[1:10])
new_join <- function(df, sexvar){
df2 <- data.frame(sex = rep(c('M', 'F'), 10), var2 = letters[20:1])
# initial attempt using usual dplyr behaviour:
# left_join(df, df2, by = c(sexvar = 'sex'))
# attempt using NSE:
# left_join(df, df2,
# by = c(eval(substitute(var), list(var = as.name(sexvar)))) = 'sex'))
# attempt using setNames:
# left_join(df, df2, by = setNames(sexvar, 'sex'))
}
new_join(df1, 'gender')
第一次和第二次尝试给出错误
错误:在rhs中找不到'sexvar'列,无法加入
而最后一次尝试给出错误
错误:在lhs中找不到“性别”列,无法加入,
至少表明它知道我想要该列gender
,但不知何故不将其视为列标题。
谁能指出我要去哪里错了?
尝试:
df1 <- data.frame(gender = rep(c('M', 'F'), 5), var1 = letters[1:10])
new_join <- function(df, sexvar){
df2 <- data.frame(sex = rep(c('M', 'F'), 10), var2 = letters[20:1])
join_vars <- c('sex')
names(join_vars) <- sexvar
left_join(df, df2, by = join_vars)
}
new_join(df1, 'gender')
我敢肯定,有一种更优雅的方法可以通过使用惰性评估等来使它正常工作,但是与此同时,这应该可以使您正常运行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句