Data.table , 1 .
library(data.table)
dt <- data.table(Index = 1:9,
Times = c( '10:30:45.58', '10:30:45.93','10:30:45.104','10:30:45.127','10:30:45.188','10:30:45.188','10:30:45.212','10:30:45.231','10:30:45.231' ),
Midquote = c('5.319','5.323','5.325','5.322','5.325',NA,NA,'5.321','5.321')
)
> dt[ Times != Times[.N] & !is.na(Midquote), max(Index) ]
[1] 5
Index, ( )
dt2 <- data.table(Times = c( '10:30:45.58', '10:30:45.93','10:30:45.104','10:30:45.127','10:30:45.188','10:30:45.188','10:30:45.212','10:30:45.231','10:30:45.231' ),
Midquote = c('5.319','5.323','5.325','5.322','5.325',NA,NA,'5.321','5.321'))
dt2[, cbind(.SD, id=.I)][ Times != Times[.N] & !is.na(Midquote), max(id) ]
dt2[, max(which(Times != Times[.N] & !is.na(Midquote))) ]
NB nrow, , , 1-, 2- 4- , , nrow 3, 3- .
EDIT 2 ( 3 )
dt3 <- data.table(Times = c( '10:30:45.58', '10:30:45.93','10:30:45.104','10:30:45.127','10:30:45.188','10:30:45.188','10:30:45.212','10:30:45.231','10:30:45.231' ),
Midquote = c('5.319','5.323', NA,'5.322','5.325', NA, NA,'5.321','5.321'))
dt3[, cbind(.SD, id=.I)][ Times != Times[.N] & !is.na(Midquote), max(id) ]
[1] 5
dt3[, max(which(Times != Times[.N] & !is.na(Midquote))) ]
[1] 5
nrow(dt3[Times != Times[.N] & !is.na(Midquote)])
[1] 4