garder toutes infos de la ligne après une selection avec dyplr

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

garder toutes infos de la ligne après une selection avec dyplr

Messagepar Guillaume Dramais » 29 Aoû 2019, 13:54

Bonjour,
J'ai un dataframe de cinq 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),
                    elevation <- rbind(1,0.2,7,5,6,0.9,2.2,0.2,4.1,NA),
                    cote <- rbind(4,NA,7,5,6,5,2,0.1,1.5,0.2)
                    )
colnames(data1)<- c("distance","profondeur","valeur","elevation","cote")
data1


Je construit un autre dataframe avec trois conditions : Je veux 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.

Une des solutions pour le faire est un "pipeline"

Code : Tout sélectionner

df<-data1 %>% filter(!is.na(valeur)) %>% group_by(distance) %>% summarise(prof_max=max(profondeur))


Cependant je voudrai garder dans le résultat "df" les valeurs des autres colonnes, pas seulement "distance" et "prof_max". J'ai bien vu un ".keepall " qui s'utilise avec la fonction "distinct", j'ai essayé d'autres combinaisons mais je bloque...

Si vous avez une suggestion svp

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

Re: garder toutes infos de la ligne après une selection avec dyplr

Messagepar Pierre-Yves Berrard » 29 Aoû 2019, 14:35

Bonjour,

J'ai envie de répondre que ce n'est pas possible, pas seulement dans R mais conceptuellement (en tout cas avec un data.frame rectangulaire contenant une seule valeur par cellule).

Pourriez-vous quand même donner un aperçu du résultat souhaité ?
PY

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

Re: garder toutes infos de la ligne après une selection avec dyplr

Messagepar Guillaume Dramais » 29 Aoû 2019, 16:34

Bonsoir,
Bon...

Avec mon pipeline j'obtiens ça:

Code : Tout sélectionner

# A tibble: 4 x 2
  distance prof_max
     <dbl>    <dbl>
1        2      4.3
2        4      1.2
3        7      3.7
4        9      4.3


Mais je voudrais toute la ligne comme ceci:

Code : Tout sélectionner

distance   profondeur   valeur   elevation   cote
1   2   4.3   45.0   5.0   5.0
2   4   1.2   0.4   0.2   0.1
3   7   3.7   4.5   4.1   1.5
4   9   4.3   22.0   2.2   2.0


Mais je n'ai surement pas pris le problème dans le bon sens
merci
Guillaume

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

Re: garder toutes infos de la ligne après une selection avec dyplr

Messagepar Pierre-Yves Berrard » 29 Aoû 2019, 16:46

Je n'avais pas compris, vous voulez les autres colonnes pour lesquelles prof est maximal ?
PY

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

Re: garder toutes infos de la ligne après une selection avec dyplr

Messagepar Guillaume Dramais » 29 Aoû 2019, 17:27

Oui c'est ça, je veux garder mes conditions de sélection mais obtenir les infos des autres colonnes.

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

Re: garder toutes infos de la ligne après une selection avec dyplr

Messagepar Pierre-Yves Berrard » 29 Aoû 2019, 17:55

Une solution :

Code : Tout sélectionner

data1 <- data.frame(distance = c(2,2,9,2,2,9,9,4,7,9),
                    profondeur = c(2.9,5.8,0.3,4.3,3.1,0.5,4.3,1.2,3.7,6.9),
                    valeur = c(14,NA,17,45,26,59,22,0.4,4.5,NA),
                    elevation = c(1,0.2,7,5,6,0.9,2.2,0.2,4.1,NA),
                    cote = c(4,NA,7,5,6,5,2,0.1,1.5,0.2)
                    )

data1 %>%
  group_by(distance) %>%
  summarise(
    n_max = which.max(profondeur),
    prof_max = profondeur[n_max],
    valeur = valeur[n_max],
    elevation = elevation[n_max],
    cote = cote[n_max]
  ) %>%
  select(-n_max)

Notez la façon plus "propre" de créer le data.frame.
PY

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

[Résolu] Re: garder toutes infos de la ligne après une selection avec dyplr

Messagepar Guillaume Dramais » 30 Aoû 2019, 06:18

Excellent, merci beaucoup, je redémarre!

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

Re: garder toutes infos de la ligne après une selection avec dyplr

Messagepar Logez Maxime » 02 Sep 2019, 09:42

Bonjour,

deux autres façon de faire :

Code : Tout sélectionner

data1 %>% group_by(distance) %>% filter(profondeur == max(profondeur))
data1 %>% group_by(distance) %>% top_n(1, profondeur)
Cordialement,
Maxime

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

Re: garder toutes infos de la ligne après une selection avec dyplr

Messagepar Guillaume Dramais » 03 Sep 2019, 13:49

Merci


Retourner vers « Questions en cours »

Qui est en ligne

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

cron