boucle ou fonctions dplyr

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

Guillaume Dramais
Messages : 39
Enregistré le : 25 Sep 2018, 00:04

boucle ou fonctions dplyr

Messagepar Guillaume Dramais » 05 Mar 2019, 20:17

Bonjour,
J'ai un dataframe de trois colonnes

Code : Tout sélectionner

data1 <- data.frame(distance <- rbind(2,2,9,2,2,9,9,4,7,9),
                    profondeur <-rbind(2.9,5.8,0.3,4.3,3.1,0.5,4.3,1.2,3.7,6.9),
                    valeur <- rbind(14,NA,17,45,26,59,22,0.4,4.5,NA)
                    )
colnames(data1)<- c("distance","profondeur","valeur")
data1


Je voudrais créer un autre dataframe avec la valeur maximale de profondeur (colonne 2) pour chaque distance différente (colonne 1) pour laquelle j'ai une "valeur" valide (3eme colonne) qui soit différente de NA.

Donc pour mon exemple le résultat serait :

Code : Tout sélectionner

data2<- data.frame(distance <- rbind(2, 4, 7,9),
 profondeur <-rbind(4.3,1.2,3.7,4.3))
colnames(data2)<- c("distance","profondeur")
data2


J'ai essayé avec les fonctions group_by et filter et avec une boucle for mais je n'arrive pas à m'en sortir. Aurriez vous une suggestion svp?

Ophélie Da Silva
Messages : 2
Enregistré le : 16 Fév 2016, 13:43

Re: boucle ou fonctions dplyr

Messagepar Ophélie Da Silva » 06 Mar 2019, 07:45

Bonjour,

Passer par group_by/summarise est une solution en supprimant les lignes pour lesquelles il y a des NA avant l'agrégation.

Code : Tout sélectionner

library("dplyr")
dff <- data1[!is.na(data1$valeur),]
dff <- group_by(dff,distance)
dff <- summarise(dff, prof_max=max(profondeur))


Cordialement,
Ophélie

François Bonnot
Messages : 537
Enregistré le : 10 Nov 2004, 15:19
Contact :

Re: boucle ou fonctions dplyr

Messagepar François Bonnot » 06 Mar 2019, 08:21

Bonjour,

Code : Tout sélectionner

data3 <- data1[!is.na(data1$valeur),]
aggregate(data3$profondeur,data3["distance"],max)
François

Serge Rapenne
Messages : 1426
Enregistré le : 20 Aoû 2007, 15:17
Contact :

Re: boucle ou fonctions dplyr

Messagepar Serge Rapenne » 06 Mar 2019, 10:21

Bonjour,

une autre solution avec dplyr en utilisant les "pipe" et donc en 1 ligne :

Code : Tout sélectionner

data1 %>% filter(!is.na(valeur)) %>% group_by(distance) %>% summarise(prof_max=max(profondeur))
mes 2 cents

Serge

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Re: boucle ou fonctions dplyr

Messagepar Logez Maxime » 06 Mar 2019, 15:39

Bonjour,

mes 2 cents à moi. Je préfère la version formule de aggregate :

Code : Tout sélectionner

aggregate(profondeur ~ distance, data1[!is.na(data1$valeur),], max)
Cordialement,
Maxime

Guillaume Dramais
Messages : 39
Enregistré le : 25 Sep 2018, 00:04

Re: [RESOLU] boucle ou fonctions dplyr

Messagepar Guillaume Dramais » 06 Mar 2019, 15:53

Merci beaucoup, les 4 solutions marchent bien et vont bien m'aider pour la suite


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité