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

2024-03-23

如何在类似于问题的函数中传递列名here https://stackoverflow.com/questions/2641653/pass-a-data-frame-column-name-to-a-function但使用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))

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

df %>% filter(A %in% c(1,2))

I get:

  A B
1 2 3
2 1 2
3 1 3
4 2 1
5 1 1
6 1 3

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

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

你可以尝试

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

Or

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

 fun2(df, A, 1:2)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐