Также возможна dplyr
:
df %>%
group_by(id) %>%
filter(grepl("A,B,C,D,E", paste(treatment, collapse = ","), fixed = TRUE))
id treatment
<int> <chr>
1 1 A
2 1 B
3 1 C
4 1 D
5 1 E
Здесь также учитывается порядок, то есть отфильтровываются случаи, когда лечение не идет A,B,C,D,E
.
Еслипорядок не важен, тогда вы можете сначала расположить столбец «обработки»:
df %>%
group_by(id) %>%
arrange(treatment, .by_group = TRUE) %>%
filter(grepl("A,B,C,D,E", paste(treatment, collapse = ","), fixed = TRUE))
Учитывая сценарий, показанный @gersht, его можно изменить на:
df %>%
group_by(id) %>%
filter(grepl("A,B,C,D,E", paste(unique(treatment), collapse = ","), fixed = TRUE))
Или:
df %>%
group_by(id) %>%
arrange(treatment, .by_group = TRUE) %>%
filter(grepl("A,B,C,D,E", paste(unique(treatment), collapse = ","), fixed = TRUE))