Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

filter out rows preceding a specific condition

I have the following dataset:

ID<-rep(c("A","B"),times=c(3,4))
Departure<-c("TRUE","FALSE","TRUE","TRUE","FALSE","FALSE","TRUE")
Date<-c("Jan 1","Jan 2","Jan 3","Jan 1","Jan 2","Jan 3","Jan 4")

data<-data.frame(ID,Departure,Date)
data

ID Departure  Date
A      TRUE Jan 1
A     FALSE Jan 2
A      TRUE Jan 3
B      TRUE Jan 1
B     FALSE Jan 2
B     FALSE Jan 3
B      TRUE Jan 4

I want to subset this dataset using the following two conditions:

  1. The dataset must only keep the rows after and including the last FALSE value in the "departure" column.
  2. Condition 1 must be fulfilled within each ID.

The resulting dataset would look like this:

    ID Departure  Date

A     FALSE Jan 2
A      TRUE Jan 3
B     FALSE Jan 3
B      TRUE Jan 4

Any suggestions regarding how to do this, preferably using dplyr?

like image 601
Cam Avatar asked Apr 11 '26 18:04

Cam


1 Answers

Base R

data[
  ave(as.logical(data$Departure),data$ID,FUN=function(x){
    t=cumsum(!x)
    t==max(t)
  }),
]

  ID Departure  Date
2  A     FALSE Jan 2
3  A      TRUE Jan 3
6  B     FALSE Jan 3
7  B      TRUE Jan 4
like image 81
user2974951 Avatar answered Apr 13 '26 11:04

user2974951



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!