Tableau croisé

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

Micro Sieste
Messages : 3
Enregistré le : 13 Mai 2019, 20:43

Tableau croisé

Messagepar Micro Sieste » 15 Mai 2019, 07:15

Bonjour à tous,

Je suis nouveau ici, étudiant faisant ses premiers pas sur R. Il se peut donc que ma question soit déjà posée.

En fait, j'ai un gros jeu de données composé:
-d'une colonne d'identifiants (Numéro d'individu)
-d'une colonne de variable qualitative (étapes d'un processus)
-d'une colonne de variable quantitative (valeur obtenue)
Pour illustrer ma table, elle se présente comme suit:

N_individu Etapes Valeur
1 1 50
1 2 20
1 3 40
1 4 30
2 1 50
2 2 30
2 3 10
2 4 20
3 1 70
3 2 40
3 3 30
3 4 50

J'aimerais donc aboutir à un résultat ressemblant plutôt à ceci (tel un tableau croisé dynamique sur Excel):
1 2 3 4
1 50 20 40 30
2 50 30 10 20
3 70 40 30 50
en-tête de ligne=N_individus
en-tête de colonne=Etapes
valeurs=Valeur

Je suppose que la fonction "table" peut permettre d'obtenir un tel résultat, mais je ne connais pas le ou les option(s) qui permettrait d'y aboutir.

Merci d'avance pour votre aide.

Cordialement

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

Re: Tableau croisé

Messagepar Serge Rapenne » 15 Mai 2019, 07:42

Bonjour,

Dand R ce que tu veux faire s'appelle un passage du format long au format large, il y a plusieurs solutions pour faire ce genre de chose :
La fonction reshape, fonction de base dans R,
la fonction cast du package reshape2
mais ma préférence va à la fonction spread du package tidyr :

Code : Tout sélectionner

library(dplyr) #pour l'utilisation de %>%
library(tidyr) # pour la fonction spread
dta
   N_individu Etapes Valeur
1           1      1     50
2           1      2     20
3           1      3     40
4           1      4     30
5           2      1     50
6           2      2     30
7           2      3     10
8           2      4     20
9           3      1     70
10          3      2     40
11          3      3     30
12          3      4     50
> dta %>% spread(Etapes,Valeur)
  N_individu  1  2  3  4
1          1 50 20 40 30
2          2 50 30 10 20
3          3 70 40 30 50


Une petite remarque complémentaire qui n'engage que moi: Le format long présente plein d'avantage dans R, c'est notamment le format qu'utilise majoritairement tous les packages de tidyverse ( par ex ggplot, dplyr, cf https://www.tidyverse.org/ pour les détails). Personnellement j'ai de plus en plus tendance à travailler quasi exclusivment avec des données au format long.

Serge

Micro Sieste
Messages : 3
Enregistré le : 13 Mai 2019, 20:43

Re: Tableau croisé

Messagepar Micro Sieste » 15 Mai 2019, 08:41

Ok Merci Beaucoup Monsieur Serge.

En fait je veux faire cela car je doit faire une régression logistique après et j'ai peur que le fait qu'un même individu se répète plusieurs fois fausse ma modélisation.

Micro Sieste
Messages : 3
Enregistré le : 13 Mai 2019, 20:43

Re: Tableau croisé

Messagepar Micro Sieste » 15 Mai 2019, 11:36

J'ai exécuté la commande comme conseillé en adaptant à ma table mais elle me signale une erreur

Code : Tout sélectionner

Error: Duplicate identifiers for rows


Auriez-vous une solution svp?

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

Re: Tableau croisé

Messagepar Serge Rapenne » 15 Mai 2019, 11:52

Pour que ça fonctionne, il faut que les couples (N_individu,Etapes) soient uniques ça ne doit pas être le cas dans ton jeu de données complet.

Si

Code : Tout sélectionner

with(dta,table( N_individu,Etapes))
          Etapes
N_individu 1 2 3 4
         1 1 1 1 1
         2 1 1 1 1
         3 1 1 1 1

ne retourne pas que des 1, il y a un pb

Serge


Retourner vers « Questions en cours »

Qui est en ligne

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