Фильтрация информационного кадра по значениям, являющимся подмножеством данного набора - PullRequest
0 голосов
/ 10 декабря 2018

Допустим, у нас есть люди, которые занимаются различными видами деятельности.

data <- data.frame(person=c('A','A','A','B','B','B','C','C'), activity=c(1,2,3,1,2,3,1,2))

Я бы хотел отфильтровать данные по лицам, которые выполняют «соответствующие действия», только если соответствующие действия определены другим вектором.

relevant_activities <- c(1,2)

Следовательно, значения активности человека должны быть подмножеством соответствующих действий.

Ожидаемый результат:

  person activity
1      C        1
2      C        2

Я пробовал что-то подобное безуспех:

library(dplyr)
data %>%
  group_by(person) %>%
  filter(all(relevant_activities %in% activity))

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

Вот решение с data.table

library("data.table")

D <- data.table(person=c('A','A','A','B','B','B','C','C'), activity=c(1,2,3,1,2,3,1,2))
relevant_activities <- c(1,2)

D[person %in% D[, all(activity %in% relevant_activities), person][, person[V1]]]

или с ключом для ввода данных:

D <- data.table(person=c('A','A','A','B','B','B','C','C'),
        activity=c(1,2,3,1,2,3,1,2), key="person")
relevant_activities <- c(1,2)

D[D[, all(activity %in% relevant_activities), person][, person[V1]]]
0 голосов
/ 10 декабря 2018

Мы можем обернуть с all

data %>% 
     group_by(person) %>% 
     filter(all(activity %in% relevant_activities))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...