简体   繁体   English

如何用dplyr引用变量而不是列

[英]How to refer to variable instead of column with dplyr

When using dplyr:filter, I often compute a local variable that holds the viable choices: 当使用dplyr:filter时,我经常计算一个包含可行选择的局部变量:

df <- as_tibble(data.frame(id=c("a","b"), val=1:6))
ids <- c("b","c")
filter(df, id %in% ids)
# giving id %in% c("b","c")

However, if the dataset by chance has a column with the same name, this fails to achieve the intended purpose: 但是,如果数据集偶然具有相同名称的列,则无法实现预期目的:

df$ids <- "a"
filter(df, id %in% ids)
# giving id %in% "a"

How should I explicitly refer to the ids variable instead of the ids column? 我应该如何明确引用ids变量而不是ids列?

Unquote with !! 取消引用!! to tell filter to look in the calling environment instead of the data frame: 告诉filter查看调用环境而不是数据框:

library(tidyverse)

df <- data_frame(id = rep(c("a","b"), 3), val = 1:6)
ids <- c("b", "c")

df %>% filter(id %in% ids)
#> # A tibble: 3 x 2
#>      id   val
#>   <chr> <int>
#> 1     b     2
#> 2     b     4
#> 3     b     6

df <- df %>% mutate(ids = "a")

df %>% filter(id %in% ids)
#> # A tibble: 3 x 3
#>      id   val   ids
#>   <chr> <int> <chr>
#> 1     a     1     a
#> 2     a     3     a
#> 3     a     5     a

df %>% filter(id %in% !!ids)
#> # A tibble: 3 x 3
#>      id   val   ids
#>   <chr> <int> <chr>
#> 1     b     2     a
#> 2     b     4     a
#> 3     b     6     a

Of course, the better way to avoid such issues is to not put identically-named vectors in your global environment. 当然,避免此类问题的更好方法是不要在您的全局环境中放置具有相同名称的向量。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM