сравнить строки столбца в кадре данных в R - PullRequest
0 голосов
/ 25 мая 2018

У меня есть кадр данных, как показано ниже, и логика здесь заключается в том, что для каждого отдельного 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 голосов
/ 25 мая 2018

Проверьте, больше ли значение 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...