2017-12-05 12 views
2

に代わり、列の変数を参照する方法:フィルターを、私は頻繁に実行可能な選択肢を保持するローカル変数を計算しますdplyr使用する場合dplyr

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

がどのように私は明示的にIDS列の代わりにIDS変数を参照する必要があります。同じ名前、これは意図した目的を達成するために失敗しましたか?

答えて

6

!!とUNQUOTEではなく、データフレームの呼び出し環境の中で見て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 

を、そのような問題を回避するためのより良い方法は、中に同じ名前のベクトルを入れないことですあなたの地球環境。

+0

dplyrを更新した後は私のために働いただけです。私は[dplyr vignette](https://cran.r-project.org/web/packages/dplyr/vignettes/programming.html)で新機能の説明を見つけました。 –