In R: subset or dplyr::filter with variable from vector

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-05 11:21:15

You can use df[,"a"] or df[,1]:

df <- data.frame(a = LETTERS[1:4], b = rnorm(4))
vals <- c("B","D")

dplyr::filter(df, df[,1] %in% vals)
#  a         b
# 2 B 0.4481627
# 4 D 0.2916513

subset(df, df[,1] %in% vals)
#  a         b
# 2 B 0.4481627
# 4 D 0.2916513

dplyr::filter(df, df[,"a"] %in% vals)
#  a         b
# 2 B 0.4481627
# 4 D 0.2916513

subset(df, df[,"a"] %in% vals)
#  a         b
# 2 B 0.4481627
# 4 D 0.2916513

Working with dplyr::tbl_df(df)

Some magic with lazyeval::interp helps us!

df <- dplyr::tbl_df(df)
expr <- lazyeval::interp(quote(x %in% y), x = as.name(names(df)[1]), y = vals)

df %>% filter_(expr)
# Source: local data frame [2 x 2]
#
#   a        b
# 1 B 0.4481627
# 2 D 0.2916513

A simple way to solve this problem in the tidyverse:

library(tidyverse)
df <- data.frame(a = LETTERS[1:4], b = rnorm(4))
vals <- c("B","D")
df %>% filter(!!sym(names(.)[1]) %in% vals)
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!