"Surligner" des valeurs identiques dans un dataframe

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

Nicolas Giraud
Messages : 25
Enregistré le : 21 Juin 2018, 07:00

"Surligner" des valeurs identiques dans un dataframe

Messagepar Nicolas Giraud » 21 Juin 2018, 10:25

Bonjour,

Je souhaite mettre en valeur des colonnes identiques dans un dataframe et je ne trouve pas la fonction qui le permet.

Je m'explique, par exemple, j'ai fusionné 2 dataframe pour comparer des notes attribuées à des individus selon 2 méthodes de calculs de ces notes différentes. Ainsi, j'ai 4 colonnes, Individus/Notes selon Formule 1/Individus/Notes selon Formule 2, classées dans l'ordre décroissant, cad de la meilleure note à la moins bonne. Je cherche à observer si le classement de mes individus est le même malgré l'utilisation de formules différentes mais pour cela j'ai besoin de mettre en relief les changements dans le classement.

Des idées?

Merci d'avance pour vos conseils, n'hésitez pas à me demander des éclaircissements si vous n'avez pas compris mon pb
Nicolas

Eric Casellas
Messages : 767
Enregistré le : 06 Jan 2009, 14:59

Re: "Surligner" des valeurs identiques dans un dataframe

Messagepar Eric Casellas » 21 Juin 2018, 12:23

Bonjour,

La fonction duplicated permet de détecter des éléments dupliqués...
par exemple:

Code : Tout sélectionner

(X <- data.frame(A=rep(rep(1:2, 3), 2), B=rep(rep(1:3, 2),2)))
duplicated(X)
duplicated(X$A)


Eric
Eric

Nicolas Giraud
Messages : 25
Enregistré le : 21 Juin 2018, 07:00

Re: "Surligner" des valeurs identiques dans un dataframe

Messagepar Nicolas Giraud » 21 Juin 2018, 14:33

Bonjour,

Merci pour votre réponse. Cela n'a pas l'air de marcher ou j'utilise mal l'écriture (?) :

Tableau_1 <- data.frame (individus, notes_1) #avec notes_1 correspondant aux notes attribuées selon la formule 1
Tableau_2 <- data.frame (individus, notes_2)

Classement_1<- Tableau_1[rev(order(Tableau_1&notes_1)),] #rangés dans l'ordre décroissant donc de la meilleure note à la moins bonne
idem pour Classement_2

Comparaison <- cbind(Classement_1, Classement_2) #fusion des deux classements

et quand j'utilise duplicated, il m'indique FALSE partout ... or certains individus restent au même endroit

Merci encore pour votre aide
Nicolas

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

Re: "Surligner" des valeurs identiques dans un dataframe

Messagepar Mickael Canouil » 21 Juin 2018, 14:42

Bonjour,

il serait plus simple pour nous de vous aider si un code reproductible était fourni.

Code : Tout sélectionner

Comparaison <- cbind(Classement_1, Classement_2)

Il serait plus judicieux d'utiliser la fonction "merge" pour fusionner vos deux tableaux sur les valeurs de "individus".

PS: Pour une question de lisibilité, il est préférable d'utiliser les balises de code du forum.

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

Eric Casellas
Messages : 767
Enregistré le : 06 Jan 2009, 14:59

Re: "Surligner" des valeurs identiques dans un dataframe

Messagepar Eric Casellas » 21 Juin 2018, 14:49

Difficile de répondre précisément sans un code reproductible, mais j'imagine qu'il faut que tu teste l'unicité uniquement des pairs de notes et de ne pas prendre le noms des l'individus

Eric
Eric

Nicolas Giraud
Messages : 25
Enregistré le : 21 Juin 2018, 07:00

Re: "Surligner" des valeurs identiques dans un dataframe

Messagepar Nicolas Giraud » 21 Juin 2018, 15:16

Merci, désolé je suis nouveau et découvre les possibilités petit à petit...

Effectivement, si j'utilise merge() cela me permet d'avoir les deux notes pour un individu, mais ne permet pas de comparer les classements...

J'ai donc, après avoir utilisé merge(), rangé dans l'ordre décroissant selon la note 1 de telle sorte d'avoir un classement pour la note 1. La note 2 reste visible mais on voit qu'elle modifie quelque peu le classement ... mais je n'arrive toujours pas à trouver de fonction qui me permette de voir à quel point le classement est modifié...

Je ne comprends pas en quoi tester l'unicité des paires de notes me permettra d'observer une modification dans le classement ..? puisque je cherche à observer un changement de position de mes individus suivant une méthodologie de calcul différent...

Cordialement,
Nicolas

Eric Casellas
Messages : 767
Enregistré le : 06 Jan 2009, 14:59

Re: "Surligner" des valeurs identiques dans un dataframe

Messagepar Eric Casellas » 21 Juin 2018, 15:27

Nicolas Giraud a écrit :Je ne comprends pas en quoi tester l'unicité des paires de notes me permettra d'observer une modification dans le classement ..? puisque je cherche à observer un changement de position de mes individus suivant une méthodologie de calcul différent...


Oui en effet c'est plus une mauvaise compréhension de ma part de ce que tu veux, je pensai que tu voulais savoir si les notes étaient exactement les même selon les modes de calcul, si ce qui t’intéresse c'est le classement relatif de tes individus selon le mode, tu peut faire la même chose sur des colonnes représentant cette position par individus (que tu devrais pouvoir récupérer via la fonction order) selon la méthode de calcul plutôt que sur les notes ...

Eric
Eric

Nicolas Giraud
Messages : 25
Enregistré le : 21 Juin 2018, 07:00

Re: "Surligner" des valeurs identiques dans un dataframe

Messagepar Nicolas Giraud » 21 Juin 2018, 15:33

si ce qui t’intéresse c'est le classement relatif de tes individus selon le mode, tu peut faire la même chose sur des colonnes représentant cette position par individus (que tu devrais pouvoir récupérer via la fonction order) selon la méthode de calcul plutôt que sur les notes


Désolé, pas compris ce que veut dire "la même chose" ...

Nicolas

Nicolas Giraud
Messages : 25
Enregistré le : 21 Juin 2018, 07:00

Re: "Surligner" des valeurs identiques dans un dataframe

Messagepar Nicolas Giraud » 21 Juin 2018, 15:35

Vous voulez dire que j'utilise la fonction rev(order) pour classer mes individus et non mes notes ? comment R peut le comprendre ?

N

Nicolas Giraud
Messages : 25
Enregistré le : 21 Juin 2018, 07:00

Re: "Surligner" des valeurs identiques dans un dataframe

Messagepar Nicolas Giraud » 25 Juin 2018, 15:34

Bonjour,

Je reviens vers vous car je n'ai toujours pas réussi à résoudre mon problème après de nombreuses tentatives...

Pour rappeler le sujet et éviter une relecture des échanges précédents :

- j'ai des individus auxquels j'attribue une note générale (Note 1) suivant une méthode de calcul de référence et je souhaite savoir si leur classement (Rang 1) en fonction des autres individus change avec une nouvelle méthode de calcul
-j'obtiens donc un data.frame à 5 colonnes (Individus, Note 1, Rang 1, Note 2, Rang 2)

Je peux visuellement observer des changements de position mais lorsqu'on doit observer des résultats sur 600 000 individus, cela devient compliqué... Je fais donc appel à R pour qu'il puisse m'aider à "repérer" ces changements de position. J'ai ainsi utilisé la fonction duplicated pour repérer les doublons Individus/Rang mais sans résultat...

Des idées ?

Merci d'avance pour vos bons conseils
Nicolas

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

Re: "Surligner" des valeurs identiques dans un dataframe

Messagepar Mickael Canouil » 25 Juin 2018, 15:54

Bonjour,

Voir:
Qu'est-ce qu'un code reproductible ?
Comment insérer des données dans un message ?

Un jeu de donnée reproductible

Code : Tout sélectionner

library(tidyverse)
dta <- tibble(
  id = seq_len(25),
  note_1 = rnorm(n = length(id)),
  note_2 = rnorm(n = length(id)),
  rank_1 = rank(note_1),
  rank_2 = rank(note_2)
)


Peut-être tout simplement en comparant vos rangs ?

Code : Tout sélectionner

dta %>%
  mutate(
    change_rank = rank_1!=rank_2
  ) %>%
  filter(change_rank)

ou

Code : Tout sélectionner

dta[dta[, "rank_1"]!=dta[, "rank_2"], ]


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

Eric Casellas
Messages : 767
Enregistré le : 06 Jan 2009, 14:59

Re: "Surligner" des valeurs identiques dans un dataframe

Messagepar Eric Casellas » 26 Juin 2018, 08:57

Salut,

En fait il faudrait que tu définisse plus précisément ce que tu veux visualiser, en effet si tu veux comparer plusieurs permutations (chaque classement, si on ne considère pas d’ex-æquo, correspond à une permutation possible des différents individus) on peut imaginer différentes métriques pour les comparer.
par exemple on peut regarder le changement moyen de position des individus, ou considérer le nombre minimal d'opération de permutation élémentaires nécessaires pour passer d'un classement à un autre, le % d'individus n'ayant pas changé de position, ou juste le changement de position d'un seul individu... En fonction de ce que tu veux regarder, et du format de tes données, on pourra potentiellement ensuite ici t'aider sur les aspects de codage avec R, mais en ce qui concerne le fait de t'aiguiller sur le choix méthodologique à faire en amont ce n'est pas vraiment le lieu...

Eric
Eric

Nicolas Giraud
Messages : 25
Enregistré le : 21 Juin 2018, 07:00

Re: "Surligner" des valeurs identiques dans un dataframe

Messagepar Nicolas Giraud » 26 Juin 2018, 12:31

Bonjour,

Merci pour vos réponses.

Voici mon code. Je ne sais pas s'il est reproductible mais vous pouvez mieux voir comment je construis mon tableau final.
Et j'ai essayé les propositions de Michaël :

Code : Tout sélectionner

library(tidyverse)

X2017_all_data_csv <- read_csv("2017_all_data_csv.zip")

attach(X2017_all_data_csv)

note <- function(a,b,c,d,e,f,g)
{
  #expression de la note générale, A, B,...G étant différents critères pour la note générale issus du fichier X2017_all_data_csv
  N <- a*A - b*B - (c*C + d*D + e*E + f*F + g*G) #a,b,...g les coefficients donnés pour chaque critère
 
  return(N)
}

N_2017_ref <- note(3,2,0.4,0.2,0.2,0.1,0.1)  #calcul de la note de reference avec les coefficients de ref
N_2017_ref

note_2017_ref <- data.frame(id, N_2017_ref)
note_2017_ref

#supprimer les valeurs NA car données manquantes#
note_2017_ref<- na.omit(note_2017_ref);dim(note_2017_ref)
note_2017_ref

rank_2017_indiv_ref <- rev(rank(note_2017_ref$N_2017_ref))
rank_2017_indiv_ref

class_rank_2017_indiv_ref<- data.frame(note_2017_ref, rank_2017_indiv_ref)
class_rank_2017_indiv_ref

###script ci-dessus réalisé aussi pour N_2017_1 avec des coeff. différents puis :

tableaux_indiv_2017 <- cbind(class_rank_2017_indiv_ref, class_rank_2017_indiv_1)
tableaux_indiv_2017

colnames(tableaux_indiv_2017) =c('id_ref', 'N_2017_ref', 'rank_2017_indiv_ref', 'id_1', 'N_2017_1', 'rank_2017_indiv_1')
tableaux_indiv_2017

#comparaison des rangs obtenus, les rangs ont changé = TRUE (nouvelle colonne)
comp_tableaux_indiv_2017 <- tableaux_indiv_2017 %>%
  mutate(
    change_rank = rank_2017_indiv_ref!=rank_2017_indiv_1
  ) %>%
  filter(change_rank)
comp_tableaux_indiv_2017

#ne fonctionne pas ?
tableaux_indiv_2017[tableaux_indiv_2017[, "rank_2017_indiv_ref"]!=tableaux_indiv_2017[, "rank_2017_indiv_1"], ]

#Exportation de ce tableau comparatif vers EXCEL
write_csv(comp_tableaux_indiv_2017,"comp_2017_ref_1.csv")


Quand j'exporte vers excel pour jeter un œil sur le résultat, il m'indique que TOUS ont permuté de position (TRUE), or ce n'est pas le cas...

Pourquoi m'indique t'il des rangs de type ".5" ?

Bien cordialement,
Nicolas

Nicolas Giraud
Messages : 25
Enregistré le : 21 Juin 2018, 07:00

Re: "Surligner" des valeurs identiques dans un dataframe

Messagepar Nicolas Giraud » 26 Juin 2018, 12:36

Eric :
En fait il faudrait que tu définisse plus précisément ce que tu veux visualiser, en effet si tu veux comparer plusieurs permutations (chaque classement, si on ne considère pas d’ex-æquo, correspond à une permutation possible des différents individus) on peut imaginer différentes métriques pour les comparer.
par exemple on peut regarder le changement moyen de position des individus, ou considérer le nombre minimal d'opération de permutation élémentaires nécessaires pour passer d'un classement à un autre, le % d'individus n'ayant pas changé de position, ou juste le changement de position d'un seul individu...


Je cherche effectivement à observer QUI change de position suivant la méthodologie de calcul, QUI monte/descend dans le classement, puis finalement le pourcentage de changement dans le classement.

Nicolas

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

Re: "Surligner" des valeurs identiques dans un dataframe

Messagepar Pierre-Yves Berrard » 27 Juin 2018, 09:07

Nicolas Giraud a écrit :Pourquoi m'indique t'il des rangs de type ".5" ?

À cause des ex-aequos. Voir le paramètre ties.method de rank (par défaut "average").
PY


Retourner vers « Questions en cours »

Qui est en ligne

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