Подмножество строк, предшествующих определенному значению строки в сгруппированных данных с использованием R

#r #dataframe #filter #subset

#r #фрейм данных #Фильтр #подмножество

Вопрос:

Рассмотрим следующий фрейм данных

 df<-data.frame(group=c(1,1,1,2,2,2,3,3,3),
               status=c(NA,1,1,NA,NA,1,NA,1,NA),
               health=c(0,1,1,1,0,1,1,0,0))
  

Для каждой группы (т. Е. Первого столбца) я ищу способ подмножества строк, предшествующих ячейкам, где 1 впервые отображается во втором столбце (помеченный статус). Ожидаемый результат

   group status health
1     1     NA      0
2     2     NA      0
3     3     NA      1
  

Я пытался решить это с помощью функций «filter» и «slice», но не удалось установить подмножество предыдущих строк. Любая помощь приветствуется.

Ответ №1:

одним из решений является tidyverse

 df %>% 
  group_by(group) %>% 
  mutate(gr=which(status==1)[1]-1) %>% 
  slice(unique(gr)) %>% 
  select(-gr)
# A tibble: 3 x 3
# Groups:   group [3]
  group status health
  <dbl>  <dbl>  <dbl>
1     1     NA      0
2     2     NA      0
3     3     NA      1
  

или

 df %>% 
  group_by(group) %>% 
  filter(row_number() == which(status==1)[1]-1)
  

или

 df %>% 
  group_by(group) %>% 
  slice(which(lead(status==1))[1])