Transformer valeur en variable (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

Théodore Perron-Kyritsos
Messages : 12
Enregistré le : 04 Juil 2017, 12:41

Transformer valeur en variable (dataframe)

Messagepar Théodore Perron-Kyritsos » 03 Aoû 2017, 09:58

Bonjour,

Je posséde un tableau à deux variables : "observateur" et "nombre d'observation"

Code : Tout sélectionner

> tableau
# A tibble: 240 x 2
   observateur   nbr
         <chr> <int>
 1 Paul          0
 2 Pierre       0
 3 Jacques    6
 4 Pierre      10
 5 Jacques    2
 6 Pierre       3
 7 Jacques    5
 8 Jacques    0
 9 Pierre       9
10 Paul       15
# ... with 230 more rows


Je voudrais avoir un tableau avec les observateurs en variable et les observations en valeur de chaque variable.

en utilisant "spread" de dplyr j'ai le message suivant :

Code : Tout sélectionner

> tableau%>%
+   spread(observateur, nbr)
Error: Duplicate identifiers for rows (1, 2, 8, 15, 31, 36, 37, 41, 43, 51, 53, 54, 56, 57, 63, 70, 71, 76, 79, 87, 104, 106, 121, 122, 123, 124, 137, 138, 139, 140, 141, 142, 143, 144, 146, 147, 151, 154, 156, 162, 165, 187, 188, 190, 191, 193, 196, 201, 202, 230, 233), (20, 27, 28, 30, 35, 50, 59, 62, 74, 82, 85, 88, 120, 126, 129, 130, 153, 159, 200, 228, 240), (5, 13, 14, 26, 33, 72, 90, 98, 107, 112, 117, 128, 148, 155, 164, 204, 216, 224, 232, 236, 239), (6, 22, 25, 34, 73, 97, 111, 115, 149, 150, 152, 172, 176, 182, 185, 192, 203, 213, 222, 235, 238), (23, 48, 134, 145, 169, 170, 173, 175, 178, 199, 219), (7, 21, 32, 38, 52, 55, 60, 158, 177, 181, 189, 209, 212, 220, 229), (3, 49, 58, 91, 109, 160, 161, 179, 184, 194, 226), (17, 24, 68, 210), (78, 96, 218, 225), (9, 18, 47, 65, 92, 118, 135), (4, 77, 89, 101, 132, 227), (16, 19, 39, 44, 75, 84, 157, 163), (83, 127, 186, 197, 198, 215), (67, 95, 195, 205, 223, 234), (10, 86, 103, 207, 221), (29, 42, 45, 206), (100, 102, 214, 231


J'ai remarqué que cela correspondait aux valeurs en double.

Merci de votre aide,

Bonne journée.

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

Re: Transformer valeur en variable (dataframe)

Messagepar Serge Rapenne » 03 Aoû 2017, 10:15

Bonjour,

comment souhaites tu gérer les doublons ? faut il ajouter des lignes avec des valeurs NA facon

Code : Tout sélectionner

paul  pierre
0        0
NA     10
NA      3
faut il sommer les observations, faut il faire autre chose ?

Serge

Théodore Perron-Kyritsos
Messages : 12
Enregistré le : 04 Juil 2017, 12:41

Re: Transformer valeur en variable (dataframe)

Messagepar Théodore Perron-Kyritsos » 03 Aoû 2017, 11:49

Je souhaite garder mes doublons et je ne veux pas perdre d'information.

Obtenir un tableau semblable

Code : Tout sélectionner

   
Paul   Pierre    Jacques
  0      10           6
 15       0           2
  0       3           5
          9           0

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

Re: Transformer valeur en variable (dataframe)

Messagepar Pierre-Yves Berrard » 03 Aoû 2017, 12:19

Bonjour,

Pour "dédoublonner" les observateurs, on ajoute une colonne avec un compteur par observateur et nombre.
On peut ensuite appliquer tidyr::spread.

Code : Tout sélectionner

library(tidyr)
library(dplyr)

tableau2 <-
  tableau %>%
  group_by(observateur) %>%
  mutate(.compteur = 1:n())

tableau2 %>%
  spread(observateur, nbr) %>%
  select(-.compteur)
PY

Théodore Perron-Kyritsos
Messages : 12
Enregistré le : 04 Juil 2017, 12:41

Re: Transformer valeur en variable (dataframe)

Messagepar Théodore Perron-Kyritsos » 03 Aoû 2017, 12:28

Parfait c'est exactement ce qu'il me fallait ! Par contre je n'ai pas compris comment le fait de rajouter une colonne "compteur" me permettait de résoudre mon problème.

Merci et bonne journée !

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

Re: Transformer valeur en variable (dataframe)

Messagepar Pierre-Yves Berrard » 03 Aoû 2017, 13:03

En gros, la fonction spread transforme les modalités de "observateur" en autant de variables, et laisse le reste tel quel. Elle transforme ainsi plusieurs lignes en une seule, ceci pour chaque croisement, hors variable à mettre en colonne.
Comme il n'y a pas d'autres variables de ventilation autre qu'"observateur", spread essaye de transformer les 240 lignes en un tableau d'une ligne et 240 colonnes (avec présence de doublons et donc erreurs). D'où l'idée de créer une variable de ventilation ".compteur".
PY


Retourner vers « Questions en cours »

Qui est en ligne

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