удаление первых 3 строк группы с условным оператором в r - PullRequest
2 голосов
/ 25 апреля 2020

Я хотел бы удалить строки, которые не удовлетворяют требуемому условию. Например:

Event   Value
  1       1
  1       0
  1       0
  1       0
  2       8
  2       7
  2       1
  2       0
  2       0
  2       0
  3       8
  3       0
  3       0
  3       0
  3       0

Если для каждого события в столбце значения есть число, превышающее 2 (значение> 2), удалите первые 3 строки, начиная с этого значения, которое не соответствует критериям.
Это должно выглядеть следующим образом:

Event   Value
  1       1
  1       0
  1       0
  1       0
  2       0
  2       0
  3       0
  3       0

Мне удалось удалить первую строку каждого события, которое соответствует sh критериям, но я не нашел способа удалить другие строки.

Event<- c(1,1,1,1,2,2,2,2,2,2,3,3,3,3,3)  
Value<- c(1,0,0,0,8,7,1,0,0,0,8,0,0,0,0)
A<- data.frame(Event, Value)

  A %>%
  group_by(Event) %>%
  filter(!(Value >= 2 & row_number() == 1))

Есть идеи?

1 Ответ

2 голосов
/ 25 апреля 2020

Вот вариант с slice. После группировки по «Событию», проверьте if, есть any «Значение» больше или равно 2, затем верните отрицательный индекс последовательности из первого вхождения этого случая или else верните row_number() , Отрицательный индекс удаляет эти строки

library(dplyr)
A %>% 
     group_by(Event) %>% 
     slice(if(any(Value >=2)) -(which(Value >=2)[1] + 0:2) else row_number())
...