Есть ли хороший способ отфильтровать и удалить отдельные строки, используя условия? - PullRequest
0 голосов
/ 06 февраля 2020

Я хочу фильтровать и удалять строки, используя трубопровод Dplyr. Столбец с именем TimeGap имеет значения 1, 2, 3. Я хочу удалить строки, которые находятся непосредственно над значением TimeGap 2.

Пример кадра данных с именем TimeDifference

   Site   Result   TimeGap
1. 1       120       1
2. 1       50        3
3. 1       100       3
4. 2       500       1
5. 2       888       3
6. 2       456       3
7. 3       123       1
8. 3       458       2
9. 3       654       3
10. 4       789       1
11. 4       785       2
12. 4       894       3
13. 4       123       3
14. 5       10        1
15. 5       5         3
16. 5       41        3
17. 6       23        1
18. 6       24        2
19. 6       55        3
20. 6       69        1
21. 6       5         2

1 Ответ

0 голосов
/ 10 февраля 2020

Вы хотите использовать функцию lead, которая указывает на следующую строку.

Если я правильно понял ваш вопрос, вы хотите отфильтровать строку, если в следующей строке есть TimeGap==2. Вот код:

db=read.table(header=T,text="
row Site   Result   TimeGap
1. 1       120       1
2. 1       50        3
3. 1       100       3
4. 2       500       1
5. 2       888       3
6. 2       456       3
7. 3       123       1#remove
8. 3       458       2
9. 3       654       3
10. 4       789       1#remove
11. 4       785       2
12. 4       894       3
13. 4       123       3
14. 5       10        1
15. 5       5         3
16. 5       41        3
17. 6       23        1#remove
18. 6       24        2
19. 6       55        3
20. 6       69        1#remove
21. 6       5         2")

db2=db %>% filter(lead(TimeGap)!=2)
setdiff(db$row, db2$row)
# [1]  7 10 17 20 21

Это отфильтровывает строки 7, 10, 17, 20 и 21, как и ожидалось.

...