Пока нет других условий для сопоставления, это будет работать с:
library(magrittr)
library(dplyr)
Начните с создания фиктивного столбца, который сообщает нам, является ли это немедленной копией предыдущего «A»:
> df %>% group_by(user) %>%
mutate(condition=paste0(action,lag(action)==action))
# A tibble: 9 x 3
# Groups: user [2]
user action condition
<fct> <fct> <chr>
1 1 A ANA
2 1 A ATRUE
3 1 B BFALSE
4 1 B BTRUE
5 2 A ANA
6 2 C CFALSE
7 2 C CTRUE
8 2 A AFALSE
9 2 A ATRUE
Затем вы можете отфильтровать строки внутри каждого пользователя, где A следует за другим A:
> df %>% group_by(user) %>%
mutate(condition=paste0(action,lag(action)==action)) %>%
filter(condition!="ATRUE")
# A tibble: 7 x 3
# Groups: user [2]
user action condition
<fct> <fct> <chr>
1 1 A ANA
2 1 B BFALSE
3 1 B BTRUE
4 2 A ANA
5 2 C CFALSE
6 2 C CTRUE
7 2 A AFALSE
Вам даже не нужно показывать фиктивный столбец, потому что вы можете просто отфильтроватьстроки, соответствующие «ATRUE», а затем выберите две переменные, которые вам нужны:
> df %>% group_by(user) %>%
mutate(condition=paste0(action,lag(action)==action)) %>%
filter(condition!="ATRUE") %>% select(user,action)
# A tibble: 7 x 2
# Groups: user [2]
user action
<fct> <fct>
1 1 A
2 1 B
3 1 B
4 2 A
5 2 C
6 2 C
7 2 A