gpt4 book ai didi

r - dplyr 在函数中连接两个表,其中一个变量名称是函数的参数

转载 作者:行者123 更新时间:2023-12-01 11:24:45 25 4
gpt4 key购买 nike

我正在尝试在一个函数中使用 dplyr 连接两个表,其中一个变量名称由函数的参数定义。在其他 dplyr 功能中,通常有一个版本可用于非标准评估,例如select & select_renamerename_ 等,但不适用于_join家庭。我找到了 this answer ,但我无法在下面的代码中使用它:

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')

第一次和第二次都报错

Error: 'sexvar' column not found in rhs, cannot join

虽然最后一次尝试给出了错误

Error: 'gender' column not found in lhs, cannot join,

这至少表明它知道我想要列 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')

我确信有一种更优雅的方法可以使用惰性求值等来实现它,但这应该可以让您同时启动并运行。

关于r - dplyr 在函数中连接两个表,其中一个变量名称是函数的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38503960/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com