Problème comparaison occurence 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

Tomas leon
Messages : 51
Enregistré le : 09 Jan 2018, 16:12

Problème comparaison occurence dplyr

Messagepar Tomas leon » 07 Jan 2019, 11:07

Bonjour à tous,

J'ai un fichier météo et j'aimerais vérifier la cohérence entre les valeurs INSEE et le NOM des station météo.
Par exemple : lorsque je fais

Code : Tout sélectionner

length(unique(MeteoArdeche$INSEE))

Code : Tout sélectionner

length(unique(MeteoArdeche$NOM))

J'ai respectivement 59 et 66 (en gros je veux vérifier à quelles codes INSEE il y a plusieurs noms, et quels noms)

Pour vérifier j'ai fait ce code

Code : Tout sélectionner

library(dplyr)
verifcometeoA <- MeteoArdeche %>%
  group_by(INSEE) %>%
  summarise(
    N_distinct = n_distinct(NOM),
    NOM = list(unique(NOM))
    ) %>% as.data.frame


Puis :

Code : Tout sélectionner

(verifcometeoA2 <- verifcometeoA[verifcometeoA$N_distinct == 2, ])


Pour vérifier quelles codes INSEE ont 2 noms.

Cela fonctionnait, mais plus maintenant ! Avant j'avais une colonne [INSEE], [N_distinct] et [NOM]. Et dans la Variable NOM, j'avais les différents noms de stations séparés par une virgule.
Cependant lorsque je fais le même code maintenant je n'arrive plus à retrouver le résultat, j'ai le message :

Code : Tout sélectionner

[1] N_distinct NOM       
<0 lignes> (ou 'row.names' de longueur nulle)

et le

Code : Tout sélectionner

str(verifcometeoA )
donne

Code : Tout sélectionner

data.frame':   1 obs. of  2 variables:
 $ N_distinct: int 66
 $ NOM       :List of 1
  ..$ : chr  "ALBA-LA-ROMAINE(ST-PHILIPPE)" ...


Quelqu'un aurait une idée s'il vous plait ?

Merci !

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: Problème comparaison occurence dplyr

Messagepar Mickael Canouil » 07 Jan 2019, 12:31

Bonjour,

C'est plus facile d'aider avec un code reproductible...
Qu'est-ce qu'un code reproductible ?
Comment insérer des données dans un message

Il n'est pas très utile d'appliquer as.data.frame sur un tibble.
Sauf juste avant une éventuelle exportation vers un fichier ou via une fonction graphique qui pourrait préférer un data.frame à part entière.

Code : Tout sélectionner

library(dplyr)
verifcometeoA <- MeteoArdeche %>%
  group_by(INSEE) %>%
  summarise(
    N_distinct = n_distinct(NOM),
    NOM = list(unique(NOM))
  )


Quitte à utiliser dplyr, autant le faire jusqu'au bout:

Code : Tout sélectionner

verifcometeoA2 <- filter(verifcometeoA, N_distinct == 2)


Le potentiel problème vient de ce filtre a priori.
En effet, vous ne cherchez que les lignes qui ont strictement deux noms, or vous souhaitez ceux qui ont strictement plus de un nom.

Code : Tout sélectionner

verifcometeoA2 <- filter(verifcometeoA, N_distinct > 1)


Cordialement,
Mickaël
mickael.canouil.fr | rlille.fr

Tomas leon
Messages : 51
Enregistré le : 09 Jan 2018, 16:12

Re: Problème comparaison occurence dplyr

Messagepar Tomas leon » 07 Jan 2019, 14:20

Bonjour à tous,

Merci pour ta suggestion de

Code : Tout sélectionner

filter()
cela fonctionne très bien.

c'est bon j'ai trouvé ! l'erreur ne venait pas du code en lui même mais d'une interférence entre 2 packages !
entre

Code : Tout sélectionner

library(dplyr)
et

Code : Tout sélectionner

library(plyr)
. J'ai supprimé le second et maintenant cela fonctionne.

Merci à tous

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: Problème comparaison occurence dplyr

Messagepar Mickael Canouil » 07 Jan 2019, 15:44

Pour information, pour identifier ce type de conflit, vous pouvez utiliser

Code : Tout sélectionner

tidyverse::tidyverse_conflicts()
ou charger en début de session le package "conflicted" (qui s'allie très bien avec le package prefixer)
Mickaël
mickael.canouil.fr | rlille.fr


Retourner vers « Questions en cours »

Qui est en ligne

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