R,使用dplyr :: filter()和%in%将列名作为参数传递给函数

use*_*672 7 r filter dplyr

我怎么能在类似问题的函数传递一个列名在这里,但使用dplyr链接和filter()一起%in%.

require(dplyr)
set.seed(8)
df <- data.frame(
  A=sample(c(1:3), 10, replace=T), 
  B=sample(c(1:3), 10, replace=T))
Run Code Online (Sandbox Code Playgroud)

如果想要获得A列为1或2的行,我可以这样做:

df %>% filter(A %in% c(1,2))
Run Code Online (Sandbox Code Playgroud)

我明白了:

  A B
1 2 3
2 1 2
3 1 3
4 2 1
5 1 1
6 1 3
Run Code Online (Sandbox Code Playgroud)

现在,我如何将它放在一个函数中,可以指定列,这不起作用:

fun1 <- function(x, column, n){
  res <- 
    x %>% filter(column %in% n)
  return(res)
}
fun1(df, A, c(1,2))
Run Code Online (Sandbox Code Playgroud)

akr*_*run 9

你可以试试

fun1 <- function(x, column, n){
 x %>% 
  filter_(lazyeval::interp(quote(x %in% y), x=as.name(column), y=n))
 }
fun1(df, 'A', 1:2)
Run Code Online (Sandbox Code Playgroud)

要么

fun2 <- function(x, column, n){
   args <- as.list(match.call())
   x %>%
     filter(eval(args$column, x) %in% n)
 }

 fun2(df, A, 1:2)
Run Code Online (Sandbox Code Playgroud)