2016-06-10 10 views
0

Ich möchte ein data.frame von lang nach breit verschieben. Immer wenn ich eine doppelte ID habe, möchte ich meine Ergebnisse in einer bestimmten Variable in eine neue Spalte kopieren. Am Ende möchte ich, dass ID eine einzigartige ID ist. Ich habe mir die Umformfunktion angeschaut - aber ich kann nicht damit umgehen, dass ich die "Zeitvar" nicht habe - in meinem speziellen Fall habe ich keine Gruppierungsvariable, die ich umformen möchte. Es gibt einen Überlauf bei der Stapelverarbeitung mit Umformungsdaten, aber ich kann dieses Problem nicht finden.lang zu weit mit out timevar

ich habe:

a<- 
    data.frame( 
     id = c(11,12,13,14,15,15,16,17,17,18,19,10) , 
     pi = c(21:32) 
) 

Ich möchte

b<- 
    data.frame( 
     id = c(11,12,13,14,15,16,17,18,19,10) , 
     pi = c(21:25,27:28,30:32), 
     pi2 = c(NA,NA,NA,NA,26,NA,29,NA,NA,NA)  
) 
+0

yup - das ist ein Duplikat. Ich weiß nicht, wie ich das vermisst habe. – MatthewR

Antwort

0

Sie diese in wenigen Schritten tun:

bb <- aggregate(pi~id, data=a, FUN=c) 
cols <- max(sapply(bb$pi, length)) 
b <- cbind(bb$id, sapply(seq(cols), function(i) sapply(bb$pi, '[', i))) 
b 
## [,1] [,2] [,3] 
## 1 10 32 NA 
## 2 11 21 NA 
## 3 12 22 NA 
## 4 13 23 NA 
## 5 14 24 NA 
## 6 15 25 26 
## 8 16 27 NA 
## 9 17 28 29 
## 11 18 30 NA 
## 12 19 31 NA