Commande Tableau Alignement valeurs identiques

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

Commande Tableau Alignement valeurs identiques

Messagepar Nicolas Giraud » 02 Aoû 2018, 14:50

Bonjour,

J'ai un data frame dans lequel je souhaite aligner les valeurs identiques à chaque colonne.

Ainsi, par exemple:

Code : Tout sélectionner

> d1 <- data.frame(x1 = c("A", "B", "C", "D", "E"),
+                  x2 = c("B","D", "E", "A", "F"),
+                  x3 = c("D", "E", "A","B", "C" ))
> d1
  x1 x2 x3
1  A  B  D
2  B  D  E
3  C  E  A
4  D  A  B
5  E  F  C


que je souhaite transformer en :

Code : Tout sélectionner

> d2 <- data.frame(x1 = c("A", "B", "C", "D", "E"),
+                  x2 = c("A", "B", "C", "D", "E"),
+                  x3 = c("A", "B", "C", "D", "E"))
> d2
  x1 x2 x3
1  A  A  A
2  B  B  B
3  C  C  C
4  D  D  D
5  E  E  E


Cet exemple est plutôt simple mais dans l'idée c'est ce que je souhaite faire. Je tiens tout de même à rajouter que certaines colonnes (x2, x3, ...xn) ne contiennent pas toutes les valeurs de la colonne de référence, à savoir x1. De ce fait, lorsque la colonne (x4 par exemple) n'a pas la valeur A, je souhaiterais y faire apparaitre un zéro, comme ci-dessous.

Code : Tout sélectionner

> d2 <- data.frame(x1 = c("A", "B", "C", "D", "E"),
+                  x2 = c("A", "B", "C", "D", "E"),
+                  x3 = c("A", "B", "C", "D", "E"),
+                  x4= c(0, "B", "C", "D", "E"))
> d2
  x1 x2 x3 x4
1  A  A  A  0
2  B  B  B  B
3  C  C  C  C
4  D  D  D  D
5  E  E  E  E


Quelques bonnes idées peut-être ?

En vous remerciant par avance,
Bien cordialement,

Nicolas

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

Re: Commande Tableau Alignement valeurs identiques

Messagepar Serge Rapenne » 02 Aoû 2018, 14:57

Bonjour,

je ne comprend pas quand il faut mettre 0,
sinon n'est ce pas tout simplement :

Code : Tout sélectionner

d2<-d1
d2[,2:3]<-d2[,1]
> d2
  x1 x2 x3
1  A  A  A
2  B  B  B
3  C  C  C
4  D  D  D
5  E  E  E


Serge

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

Re: Commande Tableau Alignement valeurs identiques

Messagepar Nicolas Giraud » 02 Aoû 2018, 15:45

Serge, merci pour votre réponse.

Toutes les colonnes (x2, x3, ...xn) ne contiennent pas toutes les valeurs de x1 (ma colonne de référence avec toutes les valeurs de mon tableau) et je souhaite faire apparaitre les valeurs identiques sur les mêmes lignes. Lorsque une colonne (par exemple x4) n'a pas une des valeurs de x1, alors je souhaiterais y faire apparaitre un 0.

J'ai un data.frame sous format csv avec énormément de colonnes, je souhaite aligner les valeurs identiques sur une même ligne et mettre des 0 éventuellement dans les cases vides (lorsque une valeur de x1 n'est pas représentée dans une colonne x4 par exemple).

J'essaie de construire un code représentatif mais mon fichier excel.csv présente une 1ère colonne (x1) référence présentant TOUTES les valeurs du tableau avec plus de lignes que les autres (x2 à xn) et il me semble que R ne lit que des tableaux avec un nombre de lignes identiques.

Merci encore,

Nicolas

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

Re: Commande Tableau Alignement valeurs identiques

Messagepar Serge Rapenne » 02 Aoû 2018, 17:36

Bon si j'ai bien compris, dans ton exemple initial, la valeur F qui est dans dta$x2[5] n'est pas présente dans x1 donc il devrait apparaitre comme 0 dans la sortie.
Si c'est ça, ceci doit faire ce que tu veux :

Code : Tout sélectionner

l_elem<-unique(d1$x1)
data.frame(t(apply(d1,1,function(x) ifelse(x %in% l_elem,x[1],0) )))
 X1 X2 X3
1  A  A  A
2  B  B  B
3  C  C  C
4  D  D  D
5  E  0  E

Serge


Retourner vers « Questions en cours »

Qui est en ligne

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