我有一个像这样的数据框:
> df
id type
1 1 a
2 1 a
3 1 b
4 1 a
5 1 b
6 2 a
7 2 a
8 2 b
9 3 a
10 3 a
我想要保留每个组(id)中 type 列的第一个出现值为 'b' 之前的所有行。对于没有 type 为 'b' 的组,我想要保留它们所有的行。
生成的数据框应该长这样:
> dfnew
id type
1 1 a
2 1 a
3 1 b
4 2 a
5 2 a
6 2 b
7 3 a
8 3 a
我尝试了以下代码,但它保留了额外的行,这些行在第一个出现'b'之后仍具有值'a',并且仅排除了额外的'b'出现,这不是我想要的。请看下面的第4行。我想要摆脱它。
> df %>% group_by(id) %>% filter(cumsum(type == 'b') <= 1)
Source: local data frame [7 x 2]
Groups: id
id type
1 1 a
2 1 a
3 1 b
4 1 a
5 2 a
6 2 a
7 2 b
8 3 a
9 3 a
which.max()
。 - Rich Scrivenslice(1:which.max(type == "b"))
就不会出现那个错误了,但在这种情况下,您的期望输出是什么? - David Arenburgdata.table
的解决方案。 - David Arenburg