Фильтрация кадра данных по нескольким комбинациям столбцов в R - PullRequest
1 голос
/ 26 сентября 2019

У меня есть фрейм данных, который я хотел бы разместить на основе информации в другом фрейме данных.

Например, у меня есть df с разными значениями для x, y и z:

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?

Ответы [ 2 ]

0 голосов
/ 26 сентября 2019

Вы можете просто использовать векторную колонку вашего фильтра и &:

df %>% filter(y %in% filter_vector2$y & z %in% filter_vector2$z)

Выход:

x  y z
1 10 a
2 10 a
3 10 a
4 10 a
5 10 a
1 11 a
2 11 a
3 11 a
4 11 a
5 11 a
0 голосов
/ 26 сентября 2019

Вы также можете сделать это в одну строку, используя 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...