我有一个数据框,我想根据另一个数据框中的信息进行子集化。
例如,我有一个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中的列组合应用过滤器选择?
答案 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