我有一个如下数据框,这里的逻辑是每个不同的v1和v2,其中v2处于递增顺序,v3必须总是增加。
v1 v2 v3
ABC 0-10 3
ABC 10-20 2
ABC 20-30 4
DEF 10-20 2.5
DEF 20-30 3
DEF 30-40 1.1
DEF 40-50 2.7
XYZ 30-40 2
XYZ 40-50 2
XYZ >50 1
如果v3没有增加,则要删除行,导致输出为 下方。
v1 v2 v3
ABC 0-10 3
ABC 20-30 4
DEF 10-20 2.5
DEF 20-30 3
XYZ 40-50 2
答案 0 :(得分:2)
检查每个v3
组中的v1
值是否大于cummax
(累计最大值),直至该组中的上一个值:
dat[ave(dat$v3, dat$v1, FUN=function(x) x - c(-Inf, head(cummax(x),-1))) > 0,]
# v1 v2 v3
#1 ABC 0-10 3.0
#3 ABC 20-30 4.0
#4 DEF 10-20 2.5
#5 DEF 20-30 3.0
#8 XYZ 40-50 2.0
dat
的位置:
dat <- read.table(text=" v1 v2 v3
ABC 0-10 3
ABC 10-20 2
ABC 20-30 4
DEF 10-20 2.5
DEF 20-30 3
DEF 30-40 1.1
DEF 40-50 2.7
XYZ 40-50 2
XYZ >50 1", header=TRUE)