2013-03-12 4 views
2

Est-il possible de réorganiser les colonnes de la trame de données qui est le résultat de l'appel dcast() E.x.Réorganisation de la trame de données dcast

Compte tenu des données:

> dput(copyOfRes) 
structure(list(docName = c("doc2", "doc1", "doc1", "doc1", "doc1", 
"doc1", "doc1", "doc1", "doc1", "doc1", "doc1", "doc2"), day_of_week = c(11, 
11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 2)), .Names = c("docName", 
"week_number"), row.names = c(NA, -12L), class = "data.frame") 

Alors, quand j'utilise dcast() comme suit:

library(reshape2) 
dcast(copyOfRes, docName ~ week_number, length) 

le résultat est:

docName 2 11 
1 doc1 0 10 
2 doc2 1 1 

Je voudrais avoir la trame de données avec la valeur décroissante week_number comme suit:

docName 11 2 
1 doc1 10 0 
2 doc2 1 1 

J'ai essayé de faire dcast(copyOfRes, docName ~ sort(week_number, decreasing= TRUE), length), mais cela ne fonctionne toujours pas. Aucune suggestion?

+0

Pourquoi ne pas modifier l'ordre juste vos colonnes après la coulée? – A5C1D2H2I1M1N2O1R2T1

+1

@AnandaMahto: Merci pour la réponse, mais vous pensez que réordonner 'n' (où n changerait toujours) le nombre de colonnes qualifiées manuellement comme une bonne solution? Je préférerais ne pas le faire, au lieu de faire ce que vous avez suggéré. –

+0

no. Je préférerais que mes données soient représentatives de ce que je m'attends à ce que ce soit: des facteurs ordonnés. – A5C1D2H2I1M1N2O1R2T1

Répondre

3

Vous pouvez utiliser reorder ici avec rev

dcast(copyOfRes, docName ~ reorder(week_number,rev(week_number)), length) 
Using week_number as value column: use value.var to override. 
    docName 11 2 
1 doc1 10 0 
2 doc2 1 1 
+1

Belle utilisation de 'reorder'. Oublie toujours celui-là! +1 – A5C1D2H2I1M1N2O1R2T1

6

Vous pouvez utiliser factor() à l'intérieur de dcast() définir l'ordre approprié des niveaux.

dcast(copyOfRes, 
    docName ~ factor(week_number,levels=unique(week_number)), length) 
     docName 11 2 
    1 doc1 10 0 
    2 doc2 1 1 
+1

+1. Cela résout le problème immédiat, mais je pense toujours que l'OP devrait commencer par factoriser la variable 'week_number' si elle va finalement être traitée comme un facteur. – A5C1D2H2I1M1N2O1R2T1

Questions connexes