在R中的某个值之后删除行

时间:2014-05-28 15:23:04

标签: r dataframe

我在R中有一个数据框,

df <- data.frame(a=c(1,1,1,2,2,5,5,5,5,5,6,6), b=c(0,1,0,0,0,0,0,1,0,0,0,1))

我想删除变量b的值等于0的行,该值在重复变量a值的值等于1之后出现。

所以我要找的输出是,

df.out <- data.frame(a=c(1,1,2,2,5,5,5,6,6), b=c(0,1,0,0,0,0,1,0,1))

有没有办法在R中执行此操作?

2 个答案:

答案 0 :(得分:0)

这应该可以解决问题吗?

ind = intersect(which(df$b==0), which(df$b==1)+1)
df.out = df[-ind,]

其中(df $ b == 1)返回df的索引,其中b == 1。添加一个并与索引相交,其中b == 0。

答案 1 :(得分:0)

怎么样

df[ ave(df$b, df$a, FUN=function(x) x>=cummax(x))==1, ]

#        a b
#     1  1 0
#     2  1 1
#     4  2 0
#     5  2 0
#     6  5 0
#     7  5 0
#     8  5 1
#     11 6 0
#     12 6 1

在这里,我们使用ave查看a的每个级别,然后测试我们是否已经看到1 cummax