Je cherche à rapatrier dans un dataframe à l'aide d'une date (dans l'exemple df Enreg), des données (temp et hygr) dans un autre dataframe dans lequel des intervalles de dates sont disponibles (df TabClim2).
J'utilise pour manipuler les dates le package lubridate.
Code : Tout sélectionner
deb1<-c("2017-05-09 21:57:58","2017-05-09 22:12:58","2017-05-09 22:27:58","2017-05-09 22:42:58")
deb1<- as.character(deb1)
temp<-c(13.269,12.401,11.625,11.110)
hygr<-c(62,70,71,72)
tabClim<-data.frame(deb1,temp,hygr)
tabClim[,1]<-as.character(tabClim[,1])
tabClim$deb1<-as.POSIXct(strptime(tabClim$deb1, "%Y-%m-%d %H:%M:%S"),tz="UTC")
deltaT<-tabClim[2,1]-tabClim[1,1]
deltaT<-as.numeric(deltaT)
tabClim2<-as.data.frame(tabClim[-nrow(tabClim),])
tabClim2$finSeq<-tabClim[-1,1]
tabClim2$interval2<-interval(tabClim2[,1]-(deltaT*60/2),tabClim2$finSeq-(deltaT*60/2))
Enreg<-c("2017-05-09 21:50:00","2017-05-09 22:11:25","2017-05-09 22:17:26","2017-05-09 22:51:08","2017-05-09 21:53:00","2017-05-09 22:10:35","2017-05-09 22:19:56","2017-05-09 22:01:08")
Enreg<- as.character(Enreg)
tabAna<-data.frame(Enreg)
tabAna$Enreg<-as.POSIXct(strptime(tabAna$Enreg, "%Y-%m-%d %H:%M:%S"),tz="UTC")
J'ai commencé par réaliser une boucle mais qui ne fonctionne uniquement que si les données existent dans tabClim2...Arrghhh, ce qui n'est pas le cas dans mon exemple
Code : Tout sélectionner
for (i in 1:nrow(tabAna))
{
tabAna$Temp2<-tabClim2[tabAna$Enreg[i] %within% tabClim2$interval2==TRUE,2]
}
Vu le nombre de données à traiter, la boucle ne me semble pas optimal par contre je n'arrive pas à avancer avec les fonctions apply, mes tentatives sont du type:
Code : Tout sélectionner
res <- sapply(tabAna$Enreg, function(x) which( x %within% tabClim2$interval2,arr.ind=T))
Je souhaiterai avoir un appui pour comprendre et avancer sur ces "deux solutions". Merci par avance