Boucle for

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Louise Marrec
Messages : 3
Enregistré le : 27 Fév 2019, 21:13

Boucle for

Messagepar Louise Marrec » 28 Fév 2019, 14:22

Bonjour,

J'ai un souci de programmation avec les boucles For

J'ai une base de donnée avec en colonnes :
- le num d'hospitalisation du patient (HospitalNumber)
- La date d'admission
- la date de sortie
- la date de prélèvement lymphocytaire (afname_dt)
- le compte lymphocytaire (LYM)

Pour chaque patients il peut y avoir plusieurs hospitalisation, chaque patient il y a plusieurs prélèvements et il peut y avoir plusieurs prélèvements pour une même journée

ex :

HospitalNumber ICUadm ICUDis afname_dt LYM
12345 12/10/2017 14/10/2017 12/10/2017 1,6
12345 ... ... 12/10/2017 1,4
12345 ... ... 13/10/2017 1,7

Je souhaiterai que pour chaque patient, s'il existe plusieurs prélèvement dans une même journée R fasse la moyenne du compte lymphocytaire de la journée et la transpose dans une nouvelle colonne. Pour n'obtenir qu'un prélèvement par date et par patient.

J'ai fait une boucle :

for(i in unique(LYMPHO$HospitalNumber)){
minidf <- LYMPHO[LYMPHO$HospitalNumber==i,]
for (j in unique(minidf$afname_dt)) {
minidf2 <- minidf[minidf$afname_dt==j,]
print(mean(minidf2$LYM))}
}

qui me donne bien la moyenne des comptes lymphocytaires par dates,
Mais je n'arrive pas à la mettre en colonne dans ma dataframe...


dates<-as.Date.character(LYMPHO$afname_dt,"%d/%m/%Y")
new_df <-data.frame(dates,Patient = LYMPHO$HospitalNumber,Lympho = LYMPHO$LYM)
for(i in unique(new_df$Patient)){
minidf <- new_df[new_df$Patient==i,]
for (j in unique(minidf$dates)) {
minidf2 <- minidf[minidf$dates==j,]
new_df <- rbind(new_df, c(j, i, mean(minidf2$Lympho)))

}
}

Est ce que quelqu'un a une idée de l'endroit où je me trompe ?

Merci beaucoup

Louise

Pierre-Yves Berrard
Messages : 697
Enregistré le : 12 Jan 2016, 23:30

Re: Boucle for

Messagepar Pierre-Yves Berrard » 01 Mar 2019, 11:16

Bonjour,

Je réponds un peu à côté, principalement pour signaler qu'une boucle for n'est la meilleure façon de faire un traitement par groupe en R.

On peut par exemple utilise la fonction aggregate :

Code : Tout sélectionner

aggregate(
  HospitalNumber + afname_dt ~ LYM,
  FUN = mean,
  data = LYMPHO 
)
PY

Louise Marrec
Messages : 3
Enregistré le : 27 Fév 2019, 21:13

Re: Boucle for

Messagepar Louise Marrec » 05 Mar 2019, 12:06

Bonjour,

Merci pour la reponse !
J'ai finalememt reussi a faire ce que je voulais mais j'ai un souci d'ordre des dates...
Je vais reessayer avec vos codes pour voir si j'arrive a resoudre mon probleme

(desolle j'ai un clavier non francais donc sans accent et cedille...)

Louise


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Bing [Bot] et 1 invité