#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])