首页 > 解决方案 > 在特定行之后过滤数据

问题描述

我有一个这样的数据集:

      id    type    value
1    001     0      1991
2    001     0      1992
3    001     1      1993
4    001     1      1994
5    002     1      1992
6    002     1      1993
7    003     0      1999
8    003     1      2000
9    003     0      2001

我想先在我的数据集上选择类型等于1.

最终的预期结果应该如下:

      id    type    value


3    001     1      1993
4    001     1      1994
5    002     1      1992
6    002     1      1993

8    003     1      2000
9    003     0      2001

我知道id首先将其分组。但我不知道下一步该做什么。

有没有人有什么建议?

标签: r

解决方案


dplyr

library(dplyr)
df %>% 
  group_by(id) %>% 
  mutate(sel = cumsum(type)) %>% 
  filter(sel > 0) %>% 
  select(id, type, value)

结果:

# A tibble: 6 x 3
# Groups:   id [3]
     id  type value
  <int> <int> <int>
1     1     1  1993
2     1     1  1994
3     2     1  1992
4     2     1  1993
5     3     1  2000
6     3     0  2001

以 R 为底:

df[with(df, ave(type, id, FUN = cumsum)) > 0, ]

推荐阅读