Как отфильтровать строки на основе предыдущей строки и сохранить предыдущую строку с помощью dplyr? - PullRequest
0 голосов
/ 24 января 2019

Я пытаюсь создать подмножество строк набора данных, используя условие, основанное на предыдущей строке, сохраняя при этом предыдущую строку в подмножественных данных.По сути, это то же самое, что и вопрос здесь, но я ищу подход 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")

Что дает, как и ожидалось:

      x        y
1 incorrect 7.351168 

Я хотел бы получить следующее: все строки, отфильтрованные по условию, будут сохранены со строкой, предшествующей им в исходном наборе данных:

        x        y
1   correct 7.207544
2 incorrect 7.351168

Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 24 января 2019

С помощью фильтрации вы можете сделать:

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

Предоставление:

          x        y
1   correct 7.207544
2 incorrect 7.351168
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...