如何将数据屏蔽变量名转换为字符串(在 R 中)
How can I convert a data-masked variable name to a string (in R)
我正在编写一个函数(在 R 中),我想对其使用数据屏蔽,以便可以轻松传递变量名。我已阅读 Programming with dplyr 并了解如何通过拥抱它在函数内部使用我的变量。但是,我也想做一个连接,需要传递一个字符串给它。
以下代码是我正在尝试做的事情的 MWE,它可以工作。但是,对于连接,我有这个硬编码,如果我想通过不同的变量连接,将无法工作。
如何使用数据屏蔽轻松获取变量,然后将其转换为字符串以便在连接中使用?
谢谢!
dat1 <- tibble::tibble(dat1.v1 = 1:10, dat1.v2 = 101:110)
dat2 <- tibble::tibble(dat2.var1 = 1:10, dat2.var2 = 1001:1010)
my.func <- function(df1, df2, my.var){
df1 <- df1 %>%
mutate("{{my.var}}.plus.one" := {{my.var}} + 1)
left_join(df2, df1, by=c("dat2.var1" = "dat1.v1"))
}
my.func(dat1, dat2, dat1.v1)
我不知道在连接中使用 by
参数以本机方式执行此操作的简洁方法。
这种方法对我有用。
library(tidyverse)
dat1 <- tibble::tibble(dat1.v1 = 1:10, dat1.v2 = 101:110)
dat2 <- tibble::tibble(dat2.var1 = 1:10, dat2.var2 = 1001:1010)
my_func <- function(df1, df2, my_var){
df2 <- df2 %>%
rename({{ my_var }} := dat2.var1)
df1 <- df1 %>%
mutate("{{ my_var }}.plus.one" := {{ my_var }} + 1) %>%
right_join(df2)
df1
}
my_func(dat1, dat2, dat1.v1)
#> Joining, by = "dat1.v1"
#> # A tibble: 10 × 4
#> dat1.v1 dat1.v2 dat1.v1.plus.one dat2.var2
#> <int> <int> <dbl> <int>
#> 1 1 101 2 1001
#> 2 2 102 3 1002
#> 3 3 103 4 1003
#> 4 4 104 5 1004
#> 5 5 105 6 1005
#> 6 6 106 7 1006
#> 7 7 107 8 1007
#> 8 8 108 9 1008
#> 9 9 109 10 1009
#> 10 10 110 11 1010
我正在编写一个函数(在 R 中),我想对其使用数据屏蔽,以便可以轻松传递变量名。我已阅读 Programming with dplyr 并了解如何通过拥抱它在函数内部使用我的变量。但是,我也想做一个连接,需要传递一个字符串给它。
以下代码是我正在尝试做的事情的 MWE,它可以工作。但是,对于连接,我有这个硬编码,如果我想通过不同的变量连接,将无法工作。
如何使用数据屏蔽轻松获取变量,然后将其转换为字符串以便在连接中使用?
谢谢!
dat1 <- tibble::tibble(dat1.v1 = 1:10, dat1.v2 = 101:110)
dat2 <- tibble::tibble(dat2.var1 = 1:10, dat2.var2 = 1001:1010)
my.func <- function(df1, df2, my.var){
df1 <- df1 %>%
mutate("{{my.var}}.plus.one" := {{my.var}} + 1)
left_join(df2, df1, by=c("dat2.var1" = "dat1.v1"))
}
my.func(dat1, dat2, dat1.v1)
我不知道在连接中使用 by
参数以本机方式执行此操作的简洁方法。
这种方法对我有用。
library(tidyverse)
dat1 <- tibble::tibble(dat1.v1 = 1:10, dat1.v2 = 101:110)
dat2 <- tibble::tibble(dat2.var1 = 1:10, dat2.var2 = 1001:1010)
my_func <- function(df1, df2, my_var){
df2 <- df2 %>%
rename({{ my_var }} := dat2.var1)
df1 <- df1 %>%
mutate("{{ my_var }}.plus.one" := {{ my_var }} + 1) %>%
right_join(df2)
df1
}
my_func(dat1, dat2, dat1.v1)
#> Joining, by = "dat1.v1"
#> # A tibble: 10 × 4
#> dat1.v1 dat1.v2 dat1.v1.plus.one dat2.var2
#> <int> <int> <dbl> <int>
#> 1 1 101 2 1001
#> 2 2 102 3 1002
#> 3 3 103 4 1003
#> 4 4 104 5 1004
#> 5 5 105 6 1005
#> 6 6 106 7 1006
#> 7 7 107 8 1007
#> 8 8 108 9 1008
#> 9 9 109 10 1009
#> 10 10 110 11 1010