Я решаю эту проблему следующим образом:
#count AnesthesiaAttending_1_ID experience with new surgeon
#add case id
temp <- sqldf("select SurgicalAttending_1_ID, Anesthesia_Start, AnesthesiaAttending_1_ID from df group by AnesthesiaAttending_1_ID, Anesthesia_Start")
anes_name <- sqldf("select distinct AnesthesiaAttending_1_ID from temp")
time_ind <- sqldf("select distinct Anesthesia_Start from temp")
experience_doc <- rep(0,length(anes_name$AnesthesiaAttending_1_ID) * length(time_ind$Anesthesia_Start))
time_ind$Anesthesia_Start<-as.POSIXct(time_ind$Anesthesia_Start, format ="%Y-%m-%d %H:%M:%OS")
temp$Anesthesia_Start<-as.POSIXct(temp$Anesthesia_Start, format ="%Y-%m-%d %H:%M:%OS")
temp$anesPast <- temp$Anesthesia_Start - 730*24*60*60
temp$Anesthesia_Start<-as.character(temp$Anesthesia_Start)
temp$anesPast<-as.character(temp$anesPast)
temp$anes_experience = rep(NA, nrow(temp))
for (k in 1:nrow(temp)){
i <- temp[k, c("AnesthesiaAttending_1_ID")]
date_j <- temp[k, c("Anesthesia_Start")]
date_past <- temp[k, c("anesPast")]
query <- paste('select distinct SurgicalAttending_1_ID from temp where AnesthesiaAttending_1_ID=',toString(i), " and Anesthesia_Start<'", date_j, "' and Anesthesia_Start>='", date_past, "'", sep = "")
temp_table <- sqldf(query)
temp[k, c("anes_experience")] <- nrow(temp_table)
}
start<-min(df$Anesthesia_Start)+730*24*60*60
temp<-subset(temp, temp$Anesthesia_Start>as.POSIXct(start))
df2<-merge( df2, temp, by = c("SurgicalAttending_1_ID","AnesthesiaAttending_1_ID","Anesthesia_Start"),
all.x = TRUE, all.y = TRUE)