问题描述
考虑以下数据框
df<-data.frame(group=c(1,1,2,3,3),status=c(NA,NA,NA),health=c(0,0))
对于每个组(即第一列),我正在寻找一种方法来对第二行中首先看到1的单元格之前的行进行子集化(标记状态)。预期的输出是
group status health
1 1 NA 0
2 2 NA 0
3 3 NA 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])