J'ai un ensemble de dataframe de patient avec un dataframe avec une ligne = 1 patient et avec des informations spécifiques (DDN , poids , ...)
J'ai un second dataframe (EItab) avec les effets indésirables des patients. Par respect de confidentialité pour les patients ne mettrait que le nom des colonnes du dataframe.
Code : Tout sélectionner
[1] "STUDY_ID" "COUNTRY_ID" "EXTRACTION_DATE" "SITE_ID" "SUBJECT_ID"
[6] "SUBJECT_REF" "REF_NUMBER" "REF_INITN" "REF_INITP" "MODULE_EI"
[11] "FORM" "FORM_EITAB" "eiterm" "EITERMP" "EIGRADE"
[16] "EISTDT_D" "EISTDT_M" "EISTDT_Y" "EISTDT" "EIEVOL"
[21] "EIGRAV" "EIENDT_D" "EIENDT_M" "EIENDT_Y" "EIENDT"
[26] "EIHOSPYN" "HOSPSTDT_D" "HOSPSTDT_M" "HOSPSTDT_Y" "HOSPSTDT"
[31] "HOSPNDT_D" "HOSPNDT_M" "HOSPNDT_Y" "HOSPNDT" "EITRTYN"
[36] "EITRTPYN" "Ref"
Je dois à la fin obtenir un seul dataframe avec une seule ligne par patient. Ce dataframe ce nomme stat
Le problème c'est que pour 1 patient je peux avoir 0,1,2,3.. lignes d'effets indésirables.
Donc j'ai écris le code suivant pour donc transformer mes lignes d'effets indésirables en une seul ligne
Code : Tout sélectionner
compteur_Rep=0
Date_Start_EI<-paste(EItab$EISTDT_D,EItab$EISTDT_M,EItab$EISTDT_Y,sep="-")
Date_Fin_EI<-paste(EItab$EIENDT_D,EItab$EIENDT_M,EItab$EIENDT_Y,sep="-")
Date_Debut_Hosp<-paste(EItab$HOSPSTDT_D,EItab$HOSPSTDT_M,EItab$HOSPSTDT_Y,sep="-")
Date_fin_Hosp<-paste(EItab$HOSPNDT_D,EItab$HOSPNDT_M,EItab$HOSPNDT_Y,sep="-")
for (i in 1:nrow(EItab)){
if (i==1){
stat[EItab$REF_NUMBER[i],82]<- as.character(EItab$FORM[i])
stat[EItab$REF_NUMBER[i],83]<- as.character(EItab$eiterm[i])
stat[EItab$REF_NUMBER[i],84]<-as.numeric(EItab$EIGRADE[i])
stat[EItab$REF_NUMBER[i],85]<-Date_Start_EI[i]
stat[EItab$REF_NUMBER[i],86]<-as.character(EItab$EIEVOL[i])
stat[EItab$REF_NUMBER[i],87]<-as.character(EItab$EIGRAV[i])
stat[EItab$REF_NUMBER[i],88]<-Date_Fin_EI[i]
stat[EItab$REF_NUMBER[i],89]<-as.character(EItab$EIHOSPYN[i])
stat[EItab$REF_NUMBER[i],90]<-Date_Debut_Hosp[i]
stat[EItab$REF_NUMBER[i],91]<-Date_fin_Hosp[i]
stat[EItab$REF_NUMBER[i],92]<-as.character(EItab$EITRTYN[i])
stat[EItab$REF_NUMBER[i],93]<-as.character(EItab$EITRTPYN[i])
}
else{
if(EItab$REF_NUMBER[i]!=EItab$REF_NUMBER[i-1])
{
compteur_Rep=0
stat[EItab$REF_NUMBER[i],82]<- as.character(EItab$FORM[i])
stat[EItab$REF_NUMBER[i],83]<- as.character(EItab$eiterm[i])
stat[EItab$REF_NUMBER[i],84]<-as.numeric(EItab$EIGRADE[i])
stat[EItab$REF_NUMBER[i],85]<-Date_Start_EI[i]
stat[EItab$REF_NUMBER[i],86]<-as.character(EItab$EIEVOL[i])
stat[EItab$REF_NUMBER[i],87]<-as.character(EItab$EIGRAV[i])
stat[EItab$REF_NUMBER[i],88]<-Date_Fin_EI[i]
stat[EItab$REF_NUMBER[i],89]<-as.character(EItab$EIHOSPYN[i])
stat[EItab$REF_NUMBER[i],90]<-Date_Debut_Hosp[i]
stat[EItab$REF_NUMBER[i],91]<-Date_fin_Hosp[i]
stat[EItab$REF_NUMBER[i],92]<-as.character(EItab$EITRTYN[i])
stat[EItab$REF_NUMBER[i],93]<-as.character(EItab$EITRTPYN[i])
} else {
compteur_Rep=compteur_Rep+12
stat[EItab$REF_NUMBER[i],82+compteur_Rep]<- as.character(EItab$FORM[i])
stat[EItab$REF_NUMBER[i],83+compteur_Rep]<- as.character(EItab$eiterm[i])
stat[EItab$REF_NUMBER[i],84+compteur_Rep]<-as.numeric(EItab$EIGRADE[i])
stat[EItab$REF_NUMBER[i],85+compteur_Rep]<-Date_Start_EI[i]
stat[EItab$REF_NUMBER[i],86+compteur_Rep]<-as.character(EItab$EIEVOL[i])
stat[EItab$REF_NUMBER[i],87+compteur_Rep]<-as.character(EItab$EIGRAV[i])
stat[EItab$REF_NUMBER[i],88+compteur_Rep]<-Date_Fin_EI[i]
stat[EItab$REF_NUMBER[i],89+compteur_Rep]<-as.character(EItab$EIHOSPYN[i])
stat[EItab$REF_NUMBER[i],90+compteur_Rep]<-Date_Debut_Hosp[i]
stat[EItab$REF_NUMBER[i],91+compteur_Rep]<-Date_fin_Hosp[i]
stat[EItab$REF_NUMBER[i],92+compteur_Rep]<-as.character(EItab$EITRTYN[i])
stat[EItab$REF_NUMBER[i],93+compteur_Rep]<-as.character(EItab$EITRTPYN[i])
}}}
compteur_Rep=0
for (i in 1:5){
stat[,85+compteur_Rep]<-as.Date(stat[,85+compteur_Rep],format = "%d-%m-%Y")
stat[,88+compteur_Rep]<-as.Date(stat[,88+compteur_Rep],format = "%d-%m-%Y")
stat[,90+compteur_Rep]<-as.Date(stat[,90+compteur_Rep],format = "%d-%m-%Y")
stat[,91+compteur_Rep]<-as.Date(stat[,91+compteur_Rep],format = "%d-%m-%Y")
compteur_Rep=compteur_Rep+12
}
Ma question est la suivante : existe-il un moyen plus simple pour faire cette opération.
Merci d'avance