2016-06-09 2 views
1

J'ai besoin de transposer mes données d'une certaine manière. Je vais l'expliquer par un exemple:Transposition de quelques colonnes avec id.var unique en utilisant refonte()

Voici les données:

data <- structure(list(Date = structure(c(1335724903, 1335724903, 1335724903, 1335724903), 
            class = c("POSIXct", "POSIXt"), tzone = ""), 
        a = c("UC 2", "UC 2", "UC 2", "UC 2"), b = c("50300", "50300", "50300", "50300"), 
        c = c("40", "40", "40", "40"), d = c("ISO_A","ISO_A", "ISO_B", "ISO_C"), e = c(2L, 2L, 2L, 2L), 
        f = c(45, 45, 45, 45), g = c(0.024, 0.024, 0.024, 0.024)), 
       .Names = c("Date", "a", "b", "c", "d", "e", "f", "g"), row.names = c(NA, 4L), class = "data.frame") 

Les mêmes données mais juste au meilleur format afin que nous puissions mieux voir ce que je veux dire par « la transposition d'une certaine manière »:

   Date a  b c  d e f  g 
1 2012-04-29 20:41:43 UC 2 50300 40 ISO_A 2 45 0.024 
2 2012-04-29 20:41:43 UC 2 50300 40 ISO_A 2 45 0.024 
3 2012-04-29 20:41:43 UC 2 50300 40 ISO_B 2 45 0.024 
4 2012-04-29 20:41:43 UC 2 50300 40 ISO_C 2 45 0.024 

donc, de ce tableau, je voudrais avoir une table comme ceci:

a  b c  d e f ISO_A ISO_B ISO_C 
1 UC 2 50300 40 ISO_A 2 45 0.024 0.024 0.024 

Au moment où je suis coincé avec ce morceau de code:

data2 <- recast(data, a + b + c +d + e + f + variable ~ d, id.var = c("a","b","c","d","e","f"), fun.aggregate=mean) 

qui se traduit dans le tableau un peu différent dont j'ai besoin:

 a  b c  d e f variable  ISO_A  ISO_B  ISO_C 
1 UC 2 50300 40 ISO_A 2 45 Date 1.335725e+09   NaN   NaN 
2 UC 2 50300 40 ISO_A 2 45  g 2.400000e-02   NaN   NaN 
3 UC 2 50300 40 ISO_B 2 45 Date   NaN 1.335725e+09   NaN 
4 UC 2 50300 40 ISO_B 2 45  g   NaN 2.400000e-02   NaN 
5 UC 2 50300 40 ISO_C 2 45 Date   NaN   NaN 1.335725e+09 
6 UC 2 50300 40 ISO_C 2 45  g   NaN   NaN 2.400000e-02 

Toutes les idées comment je peux l'améliorer?

Merci beaucoup

+0

Essayez 'bibliothèque (dplyr), bibliothèque (tidyr); data%>% group_by (Date)%>% unique()%>% spread (d, g) ' – akrun

Répondre

3

Nous pouvons utiliser dcast sur la

'données' unique
library(reshape2) 
dcast(unique(data), ...~d, value.var="g", mean) 
#     Date a  b c e f ISO_A ISO_B ISO_C 
#1 2012-04-30 00:11:43 UC 2 50300 40 2 45 0.024 0.024 0.024