比较R中数据框中列的行数

时间:2018-05-24 22:38:14

标签: r dataframe

我有一个如下数据框,这里的逻辑是每个不同的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  

1 个答案:

答案 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)