Сортируйте DF
и уменьшите его до одной строки для каждого идентификатора пользователя со столбцом types
, состоящим из разделенной запятыми строки типов компаний.Затем отфильтруйте его, используя указанное условие.Наконец, используйте tally
, чтобы получить количество строк, оставшихся после фильтрации.Чтобы получить подробности, опустите строку tally
.
library(dplyr)
DF %>%
arrange(userid, company.type) %>%
group_by(userid) %>%
summarize(types = toString(company.type)) %>%
ungroup %>%
filter(grepl("A.*B|A.*C", types) & ! grepl("B.*C", types)) %>%
tally
, дающую:
# A tibble: 1 x 1
n
<int>
1 2
Примечание
Используемый ввод в воспроизводимой форме:
Lines <- "userid company.type
1 A
2 A
3 C
1 B
2 B
3 B
4 A"
DF <- read.table(text = Lines, header = TRUE)