簡體   English   中英

如何基於上一行過濾行並使用dplyr保留上一行?

[英]How to filter rows based on the previous row and keep previous row using dplyr?

我試圖使用基於上一行的條件對數據集的行進行子集化,同時將上一行保留在子集數據中。 這是基本相同,這里的問題,但我要尋找一個dplyr的方法:

根據上一行的值選擇特定的行(在同一列中)

我已經在評論中對該答案采用了dplyr方法,但是我無法弄清楚保留上一行的最后一步。

我可以得到支持我感興趣的條件的行(在沒有enter上一行的情況下不incorrect )。

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")

其中給出,符合市場預期:

      x        y
1 incorrect 7.351168 

我想產生的是這樣,因此我根據條件過濾的所有行都與原始數據集中位於它們前面的行一起存儲:

        x        y
1   correct 7.207544
2 incorrect 7.351168

任何幫助將不勝感激!

通過過濾,您可以執行以下操作:

z %>%
  filter( (x == "incorrect" & lag(x) != "enter") | lead(x == "incorrect" & lag(x) != "enter") )

給予:

          x        y
1   correct 7.207544
2 incorrect 7.351168

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM