2017-07-04 3 views
0

Ich mag würde meine Daten mit Hilfe einer Schleife und nicht die typische Transponierungsfunktion umzusetzen, damit ich nicht die Daten mit nicht verwendeten Variablen fusionieren müssen.Transponieren Daten mit Makro

Daten Ich habe ist folgendes:

df1 <- data.frame(ID=c(1:4), Amount=c(100, 150, 75, 50), 
    Month=c("Jan", "Feb", "Mar", "Apr")) 

, die die folgenden Ergebnisse liefert:

ID Amount Month 
1 100 Jan 
2 150 Feb 
3  75 Mar 
4  50 Apr 

würde ich die endgültigen Ergebnisse mag so sein:

ID Amount Jan Feb Mar Apr 
1 100 1 0 0 0 
2 150 0 1 0 0 
3  75 0 0 1 0 
4  50 0 0 0 1 

I würde wissen, wie man das in SAS macht, konnte aber mit R keine Lösung finden. Ihre Hilfe ist willkommen.

Antwort

1
library('tidyr') 
df1 <- data.frame(ID=c(1:4), Amount=c(100, 150, 75, 50), 
        Month=c("Jan", "Feb", "Mar", "Apr")) 
df1$ID <- 1 
df1 <- spread(df1 , Month, ID, fill=0) 
df1 

wird in Folge:

Amount Apr Feb Jan Mar 
1  50 1 0 0 0 
2  75 0 0 0 1 
3 100 0 0 1 0 
4 150 0 1 0 0 
+0

wenn Sie nicht 'tidyr' installiert haben, versuchen Sie' install.packages ('tidyr ")" –

1

Hier ist ein base R Option mit table

cbind(df1, as.data.frame.matrix(table(lapply(df1[-1], 
         function(x) factor(x, levels = unique(x))))))