2016-04-13 2 views
0

Je voudrais savoir comment transformer des lignes en colonnes pour l'ensemble de données suivant.comment transformer des lignes en colonnes dans R

School class Avg Subavg Sub 
ABC  2 25.3 17.2 Geo 
ABC  2 25.3 18.2 Mat 
ABC  2 25.3 20.2 Fre 
ABC  3 21.2 17.2 Geo 
ABC  3 21.2 18.2 Mat 
ABC  3 21.2 20.2 Ger 
ABC  4 16.8 17.2 Ger 
ABC  4 16.8 18.2 Mat 
ABC  5 20.2 20.2 Fre 

Résultat attendu serait

School Std stdavg Geo mat Ger  Fer 
ABC 2 25.3 17.2 18.2 NA  20.2 
ABC 3 21.2 17.2 18.2 20.2 NA 
ABC 4 25.3 NA 18.2 17.2 NA 
ABC 5 25.3 NA NA  NA  20.2 

je fonction split, mais en vain.

Merci à l'avance

+0

Le 'stdavg' pour 4 et 5 dans le résultat attendu est pas avoir un sens. – akrun

Répondre

1

Nous pouvons utiliser dcast

library(data.table) 
dcast(setDT(df1), School+class+Avg~Sub, value.var="Subavg") 
# School class Avg Fre Geo Ger Mat 
#1: ABC  2 25.3 20.2 17.2 NA 18.2 
#2: ABC  3 21.2 NA 17.2 20.2 18.2 
#3: ABC  4 24.8 NA NA 17.2 18.2 
#4: ABC  5 24.8 20.2 NA NA NA 

Ou utiliser spread de tidyr

library(tidyr) 
spread(df1, Sub, Subavg) 
+0

Malheureusement (heureusement), c'est quelque chose que nous ne pouvons pas contrôler. Et avec le vote étant anonyme (Dieu merci), les chances d'enseigner une leçon à un inconnu "quelqu'un" aléatoire est très mince. – zx8754