library(lubridate) # for hm function to compare times
last_unique <- length(d1$user)-match(unique(d1$user),rev(d1$user))+1
rows <- which(last_unique == which(hm(d1$time3) > hm("07:45")))
Получить строки, в которых последнее уникальное значение также больше 07: 45
d2 <- d1[last_unique[rows],]
Подмножество уникального пользователя и время больше 07: 45
Для В случае, если вы хотите выбрать самое последнее уникальное значение ранее , чем указанное время, просто измените лог c:
d1 <- read.table(text = "
user,time1,time2,time3
u1,07:05,07:10,07:25
u1,07:20,07:30,07:40
u2,07:20,08:00,08:10
u3,07:30,08:05,08:20
u4,07:10,07:15,07:20
u4,07:25,07:30,07:35", sep = ',', header = TRUE)
rows <- which(hm(d1$time3) < hm("07:45"))
temp <- d1[rows,]
last_unique <- length(temp$user)-match(unique(temp$user),rev(temp$user))+1
d2 <- temp[last_unique,]
d2
user time1 time2 time3
2 u1 07:20 07:30 07:40
6 u4 07:25 07:30 07:35