如何根据前一行过滤行并使用 dplyr 保留前一行?

chr*_*_90 1 r subset filter conditional-statements dplyr

我正在尝试使用基于前一行的条件对数据集的行进行子集化,同时将前一行保留在子集化数据中。这与此处的问题基本相同,但我正在寻找一种 dplyr 方法:

根据上一行值选择特定行(在同一列中)

我已经采用了对该答案的评论中应用的 dplyr 方法,但我无法弄清楚保留前一行的最后一步。

我可以获得支持我感兴趣的条件的行(incorrect当前一行不是时enter)。

set.seed(123)
x=c("enter","incorrect","enter","correct","incorrect",
"enter","correct","enter","incorrect")
y=c(runif(9, 5.0, 7.5))
z=data.frame(x,y)

filter(z, x=="incorrect" & lag(x)!="enter")
Run Code Online (Sandbox Code Playgroud)

正如预期的那样:

      x        y
1 incorrect 7.351168 
Run Code Online (Sandbox Code Playgroud)

我想要生成的是这样的,以便我根据条件过滤的所有行都与原始数据集中位于它们之前的行一起存储:

        x        y
1   correct 7.207544
2 incorrect 7.351168
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激!

arg*_*t91 5

通过过滤,您可以执行以下操作:

z %>%
  filter( (x == "incorrect" & lag(x) != "enter") | lead(x == "incorrect" & lag(x) != "enter") )
Run Code Online (Sandbox Code Playgroud)

给予:

          x        y
1   correct 7.207544
2 incorrect 7.351168
Run Code Online (Sandbox Code Playgroud)