我在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中执行此操作?
答案 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
。