I have a simple question, how could I use which and which.max at the same time. 
I would like to select the maximum epnum for the row id == B13639J2. 
I need to retreive the row number because I need to make some manual changes to the variable. 
So max epnum of row id == 'B13639J2'
           id   epnum start
95528 B13639J2     1     0
95529 B13639J2     2   860
95530 B13639J2     3  1110
95531 B13639J2     4  1155
95532 B13639J2     5  1440
I was wondering how I could simply do something like
dta[which(dta$id == 'B13639J2' & which.max(dta$epnum)), ] 
Finally then, I need to delete the spotted row.
Thanks.
The data
dta = structure(list(id = c("B13639J1", "B13639J1", "B13639J1", "B13639J1", 
"B13639J1", "B13639J1", "B13639J1", "B13639J1", "B13639J2", "B13639J2", 
"B13639J2", "B13639J2", "B13639J2"), epnum = c(4, 5, 6, 7, 8, 
9, 10, 11, 1, 2, 3, 4, 5), start = c(420, 425, 435, 540, 570, 
1000, 1310, 1325, 0, 860, 1110, 1155, 1440)), .Names = c("id", 
"epnum", "start"), row.names = 95520:95532, class = "data.frame")
One option if we are using numeric index (which/which.max) will be slice from dplyr.  Here a double slice is needed.  We first subset the 'id' i.e. 'B13639J2' and then subset again for the max of 'epnum'
values.
 library(dplyr)
 slice(dta, which(id=='B13639J2')) %>%
                   slice(which.max(epnum))
 #        id epnum start
 #1 B13639J2     5  1440
Or we group by 'id', arrange the 'epnum' in descending order, and filter the first row with the specified 'id'. 
  dta1 <- dta %>% 
             group_by(id) %>% 
             arrange(desc(epnum)) %>%
             filter(id=='B13639J2', row_number()==1L)
If we then want to remove this row from the dataset, one option is anti_join with the original dataset.
  anti_join(dta, dta1)
Or by changing the filter option this can be done
  dta %>%
      group_by(id) %>% 
      arrange(desc(epnum)) %>%
      filter(!(id=='B13639J2' & row_number()==1L))
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With