Réorganisation d'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

Jean-Emmanuel Longueville
Messages : 310
Enregistré le : 23 Fév 2011, 08:03

Réorganisation d'un dataFrame

Messagepar Jean-Emmanuel Longueville » 22 Fév 2018, 17:10

Bonjour,
Je viens vers vous ne sachant pas comment orienté ma recherche
Je pars d'un tableau qui ressemble à ça :

Niveau, Année, Ind1, Ind2, Ind3, Ind4
L1, 2013, 2, 1, 2, 2
L2, 2013, 2, 1, 2, 2
L1, 2014, 2, 2, 2, 2
L2, 2014, 2, 1, 2, 2


Et voudrais arriver à un tableau qui ressemble à ça :


2013 2014
L1 Ind1 2 2
L1 INd2 1 2
L1 Ind3 2 2
L1 Ind4 2 2
L2 Ind1
[...]


Merci
Jean-Emmanuel
Ingénieur d'étude LNEC

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

Re: Réorganisation d'un dataFrame

Messagepar Pierre-Yves Berrard » 22 Fév 2018, 17:22

Bonjour,

Le jonglage classique entre format long et format large. Ici dans les deux sens et enchaînés :

Code : Tout sélectionner

library(tidyr)    # (pour gather et spread)
library(magrittr) # (pour %>%, également disponible dans dplyr)

df <- read.csv(text="Niveau, Annee, Ind1, Ind2, Ind3, Ind4
L1, 2013, 2, 1, 2, 2
L2, 2013, 2, 1, 2, 2
L1, 2014, 2, 2, 2, 2
L2, 2014, 2, 1, 2, 2")

df %>% gather(Ind, Valeur, -Niveau, -Annee) %>% spread(Annee, Valeur)


PS : j'ai remplacé "Année" par "Annee"
PY

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Re: Réorganisation d'un dataFrame

Messagepar Logez Maxime » 23 Fév 2018, 08:50

Bonjour,

Une possibilité avec les fonctions de base, notamment reshape :

Code : Tout sélectionner

l1 <- reshape(tab, idvar = c("Niveau", "Année"), v.names = "Value", timevar = "Ind", direction = "long", varying = list(3:6))
head(l1)
          Niveau Année Ind Value
L1.2013.1     L1  2013   1     2
L2.2013.1     L2  2013   1     2
L1.2014.1     L1  2014   1     2
L2.2014.1     L2  2014   1     2
L1.2013.2     L1  2013   2     1
L2.2013.2     L2  2013   2     1
reshape(l1, timevar = "Année", idvar = c("Niveau", "Ind"), direction = "wide")
          Niveau Ind Value.2013 Value.2014
L1.2013.1     L1   1          2          2
L2.2013.1     L2   1          2          2
L1.2013.2     L1   2          1          2
L2.2013.2     L2   2          1          1
L1.2013.3     L1   3          2          2
L2.2013.3     L2   3          2          2
L1.2013.4     L1   4          2          2
L2.2013.4     L2   4          2          2
Cordialement,
Maxime

Jean-Emmanuel Longueville
Messages : 310
Enregistré le : 23 Fév 2011, 08:03

Re: Réorganisation d'un dataFrame

Messagepar Jean-Emmanuel Longueville » 23 Fév 2018, 15:52

Merci beaucoup pour cette réponse claire et efficace.
Juste savoir si j'ai bien compris le Gather sert à tout bien placer sous forme de peu de colonne pour après avoir un spread bien efficace ?
Jean-Emmanuel
Ingénieur d'étude LNEC

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

Re: Réorganisation d'un dataFrame

Messagepar Pierre-Yves Berrard » 26 Fév 2018, 13:12

Jean-Emmanuel Longueville a écrit :Juste savoir si j'ai bien compris le Gather sert à tout bien placer sous forme de peu de colonne

Oui.
Jean-Emmanuel Longueville a écrit :pour après avoir un spread bien efficace ?

Pas vraiment, gather peut fonctionner sans spread et réciproquement.
PY


Retourner vers « Questions en cours »

Qui est en ligne

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