Search code examples
rstringmultiple-columnsrows

Delete rows based on two columns (& containing specific strings)


I'm trying to delete rows based on two criteria:

  1. Trial number is the same

  2. Code includes the word "test"

The closest code I've found so far is something like this:

report[!report$Trial %in% report$Trial [report$Code == "test"]),]

but it doesn't work since the there are no cells named "test", they just contain the word

What I want in the end (according to the sample I have attached) is rows 1-20 to be deleted

report <- structure(list(Subject = c("VP02_RP", "VP02_RP", "VP02_RP", "VP02_RP", 
                           "VP02_RP", "VP02_RP", "VP02_RP", "VP02_RP", "VP02_RP", "VP02_RP", 
                           "VP02_RP", "VP02_RP", "VP02_RP", "VP02_RP", "VP02_RP", "VP02_RP", 
                           "VP02_RP", "VP02_RP", "VP02_RP", "VP02_RP", "VP02_RP", "VP02_RP", 
                           "VP02_RP", "VP02_RP", "VP02_RP", "VP02_RP", "VP02_RP", "VP02_RP", 
                           "VP02_RP", "VP02_RP"), Trial = c(9, 9, 9, 9, 9, 12, 12, 12, 12, 
                                                            12, 15, 15, 15, 15, 15, 18, 18, 18, 18, 18, 22, 22, 22, 22, 22, 
                                                            25, 25, 25, 25, 25), `Event type` = c("Picture", "Sound", "Picture", 
                                                                                                  "Nothing", "Response", "Picture", "Sound", "Picture", "Nothing", 
                                                                                                  "Response", "Picture", "Sound", "Picture", "Nothing", "Response", 
                                                                                                  "Picture", "Sound", "Picture", "Nothing", "Response", "Picture", 
                                                                                                  "Sound", "Picture", "Nothing", "Response", "Picture", "Sound", 
                                                                                                  "Picture", "Nothing", "Response"), Code = c("face01_p", "mnegsound_test3", 
                                                                                                                                              "pospic_test3", "ev_mposposneg_adj_onset", "14", "face01_n", 
                                                                                                                                              "mnegsound_test4", "pospic_test4", "ev_mnegposneg_adj_onset", 
                                                                                                                                              "14", "face01_n", "mpossound_test5", "pospic_test5", "ev_mnegpos_adj_onset", 
                                                                                                                                              "15", "face01_p", "mpossound_test6", "negpic_test6", "ev_mposnegpos_adj_onset", 
                                                                                                                                              "15", "face01_n", "mnegsound1", "pospic1", "ev_mnegposneg_adj_onset", 
                                                                                                                                              "14", "face02_n", "fpossound1", "negpic1", "ev_fnegnegpos_adj_onset", 
                                                                                                                                              "15"), Time = c("685252", "685254", "703617", "725617", "760233", 
                                                                                                                                                              "781466", "781467", "799830", "821830", "864732", "887969", "888260", 
                                                                                                                                                              "906623", "928623", "958962", "987666", "987668", "1006031", 
                                                                                                                                                              "1028031", "1076642", "1700595", "1700886", "1716953", "1748603", 
                                                                                                                                                              "1779212", "1801100", "1801392", "1816560", "1846190", "1877413"
                                                                                                                                              )), row.names = c(NA, -30L), class = c("tbl_df", "tbl", "data.frame"
                                                                                                                                              ), na.action = structure(1632:1634, .Names = c("1632", "1633", 
                                                                                                                                                                                             "1634"), class = "omit"))
`Subject` `Trial` `Event type` `Code`                 `Time`
  
   <chr>   <dbl> <chr>        <chr>                   <chr> 

 `1` VP02_RP     9 Picture      face01_p                685252

 `2` VP02_RP     9 Sound        mnegsound_test3         685254

 `3` VP02_RP     9 Picture      pospic_test3            703617

 `4` VP02_RP     9 Nothing      ev_mposposneg_adj_onset 725617

 `5` VP02_RP     9 Response     14                      760233

 `6` VP02_RP    12 Picture      face01_n                781466

 `7` VP02_RP    12 Sound        mnegsound_test4         781467

 `8` VP02_RP    12 Picture      pospic_test4            799830

 `9` VP02_RP    12 Nothing      ev_mnegposneg_adj_onset 821830

`10` VP02_RP    12 Response     14                      864732

Solution

  • Does this work:

    library(dplyr)
    library(stringr)
    
    report %>% group_by(Trial) %>% filter(all(str_detect(Code, 'test', negate = TRUE)))
    # A tibble: 10 x 5
    # Groups:   Trial [2]
       Subject Trial `Event type` Code                    Time   
       <chr>   <dbl> <chr>        <chr>                   <chr>  
     1 VP02_RP    22 Picture      face01_n                1700595
     2 VP02_RP    22 Sound        mnegsound1              1700886
     3 VP02_RP    22 Picture      pospic1                 1716953
     4 VP02_RP    22 Nothing      ev_mnegposneg_adj_onset 1748603
     5 VP02_RP    22 Response     14                      1779212
     6 VP02_RP    25 Picture      face02_n                1801100
     7 VP02_RP    25 Sound        fpossound1              1801392
     8 VP02_RP    25 Picture      negpic1                 1816560
     9 VP02_RP    25 Nothing      ev_fnegnegpos_adj_onset 1846190
    10 VP02_RP    25 Response     15                      1877413