Если я хорошо понимаю, что вы хотите, это должно сработать (оно создает новый фрейм данных "success" с успешными записями):
# create new data frame
success <- data.frame(time=character(), user=character(), Type=character(), result=character(), stringsAsFactors=F)
count <- 1
# loop around each user
for(us in unique(data[,"user"])){
# subset data per user
subdata <- data[data[,"user"] == us, ]
# skips the user if there is only one entry for that user or if there is no "Rental" entry in "Type"
if(is.null(dim(subdata))) next;
if(!is.null(dim(subdata)) & !any(subdata[,"Type"] == "Rental")) next;
# sort subdata chronologically
subdata <- subdata[order(subdata[,"time"]),]
# loop around rows in the subdata
for(i in 2:nrow(subdata)){
# calculate the time difference between entries i and i-1 if i is a rental and i-1 a search
if(difftime(subdata[i,"time"], subdata[i-1, "time"], units="mins") < 120 & subdata[i-1, "Type"] == "Search" & subdata[i, "Type"] == "Rental"){
success[count,] <- c(subdata[i,], "success")
count <- count +1
}
}
}
Это работает для той небольшой матрицы, которую вы дали, хотя вы бынужно попробовать и убедиться, что он работает правильно с большим.