在R中比较数据框中一列的行。

3
我有一个如下的数据框,这里的逻辑是对于每个不同的 v1 和在递增顺序中的 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个回答

2

检查每个v1组中的v3值是否大于该组中之前值的累计最大值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)

@thelatemail,如果您能在代码中添加解释,我将不胜感激。 - RavinderSingh13
数据框已经按v2排序了,@thelatemail 的解决方案对于v3具有相等数字的用例不起作用。 - dagan
@dagan - 好的,我已经编辑过来修复这个问题了。我认为现在应该可以工作了。 - thelatemail

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接