在R中的多个列组合上过滤数据框

时间:2019-09-26 12:05:59

标签: r dplyr

我有一个数据框,我想根据另一个数据框中的信息进行子集化。

例如,我有一个x,y和z值不同的df:

df <- expand.grid(x=1:5,y=10:12,z=c('a','b'))
从这个df中,

我想对所有具有y = 10和z = a或y = 11和z = a的值进行子集化。我用于子设置的信息在数据框中:

filter_vector2 <- expand.grid(y=10:11,z='a')
> filter_vector2
   y z
1 10 a
2 11 a

当我根据一列的内容进行过滤时,通常会创建一个向量并使用%in%函数:

filter_vector1 <- c(y=10,y=11)

filtered_data <-  df %>%
    filter(y %in% filter_vector1)

但是,如何基于filter_vector2中的列组合应用过滤器选择?

1 个答案:

答案 0 :(得分:0)

您也可以使用data.table在一行中完成此操作:

library(data.table)
filtered_vector <- setDT(df)[which(paste0(y,z) %in% paste0(filter_vector1,filter_vector2$z)),]

filtered_vector
    x  y z
 1: 1 10 a
 2: 2 10 a
 3: 3 10 a
 4: 4 10 a
 5: 5 10 a
 6: 1 11 a
 7: 2 11 a
 8: 3 11 a
 9: 4 11 a
10: 5 11 a