Search code examples
rsortingfilteringgrouping

Filtering a specific combination or sequence


Filter decision

Using R, I am trying to filter the ID's that have a specific "Decision" sequence, but the have to be in the same "Application" number. The "Decision" order needs to be C,D,E. So What I am looking for in here, is to get

Final filter

Because The ID "805" has the "Decision" sequence C,D,E and they are in the same "Application" number.

I tried using, for loops, if else, filter but nothing worked for me.


Solution

  • You can achieve it using below data.table way.

    require(data.table)
    
    data <- data.table(
      ID = c(804, 805, 805, 805, 805, 805, 805, 806, 806, 806),
      Application = c(3, 2, 3, 3, 3, 3, 4, 2, 3, 3),
      Decision = c("A", "B", "C", "D", "E", "A", "A", "B", "C", "E")
    )
    
    # Filter Condition on Decision
    cond.Decision <- c("C", "D", "E")
    
    data[
      i = ID %in% data[
        j = .(flg = all(cond.Decision %in% Decision)),
        by = ID
      ][i = flg == TRUE, j = ID] & Decision %in% cond.Decision
    ]
        ID Application Decision
    1: 805           3        C
    2: 805           3        D
    3: 805           3        E