У меня есть такой фрейм данных:
> df
id type
1 1 a
2 1 a
3 1 b
4 1 a
5 1 b
6 2 a
7 2 a
8 2 b
9 3 a
10 3 a
Я хочу сохранить все строки для каждой группы (id) до первого появления значения «b» в столбце типа. Для групп без типа «b» я хочу сохранить все их строки.
Результирующий фрейм данных должен выглядеть так:
> dfnew
id type
1 1 a
2 1 a
3 1 b
4 2 a
5 2 a
6 2 b
7 3 a
8 3 a
Я пробовал следующий код, но он сохраняет дополнительные строки, которые имеют значение «a» после первого появления «b», и исключает только дополнительные вхождения «b», чего я не хочу. Посмотрите на строку 4 ниже. Я хочу избавиться от этого.
> df %>% group_by(id) %>% filter(cumsum(type == 'b') <= 1)
Source: local data frame [7 x 2]
Groups: id
id type
1 1 a
2 1 a
3 1 b
4 1 a
5 2 a
6 2 a
7 2 b
8 3 a
9 3 a