2016-06-09 19 views
0

Oftmals in der Forschung müssen wir eine Übersichtstabelle machen. Ich möchte eine Tabelle mit tapply in R erstellen. Das einzige Problem ist, ich habe 40 Variablen und ich möchte grundsätzlich die gleiche Operation für alle 40 Variablen durchführen. Hier ist ein Beispiel der DatenVerwendung von Variationen von `apply` in R

Age Wt Ht Type 
79 134 66 C 
67 199 64 C 
39 135 78 T 
92 149 61 C 
33 138 75 T 
68 139 71 C 
95 198 62 T 
65 132 65 T 
56 138 81 C 
71 193 78 T 

Im Wesentlichen würde Ich mag es zu bekommen, die Mittel aller Variablen zu erzeugen, angesichts der Typ. Es sollte aussehen, als

 C  T 
Age 72.4 60.6 
Wt 151.8 159.2 
Ht 68.6 71.6 

versuchte ich

sapply(df, tapply(df, df$Type, mean)) 

verwenden, aber einen Fehler bekam.

Jede Anleitung wäre willkommen.

Antwort

2

Versuchen:

> sapply(df[1:3], tapply, df$Type, mean) 
    Age Wt Ht 
C 72.4 151.8 68.6 
T 60.6 159.2 71.6 

alternativ können Sie colMeans verwenden:

> sapply(split(df[1:3], df$Type), colMeans) 
     C  T 
Age 72.4 60.6 
Wt 151.8 159.2 
Ht 68.6 71.6 
+0

Jetzt wäre ich in der Lage, das erste Ergebnis zu transponieren, so dass ich die Werte von Typ an der Spitze wie im zweiten Beispiel habe? – akash87

+0

setze alles in 't (...)', wenn du die Transponierung willst –

1

Sie könnten aggregate verwenden:

res <- aggregate(DF[,names(DF) != 'Type'],list(DF$Type),mean) 
> res 
    Group.1 Age Wt Ht 
1  C 72.4 151.8 68.6 
2  T 60.6 159.2 71.6 

dann zur Umsetzung:

m <- t(res[-1]) # convert the data.frame (excluding first col) in a matrix and traspose it 
colnames(m) <- res[[1]] # set colnames of the matrix taking them from the data.frame 1st col 
> m 
     C  T 
Age 72.4 60.6 
Wt 151.8 159.2 
Ht 68.6 71.6 
+0

Jetzt wäre ich in der Lage, das erste Ergebnis zu transponieren, so dass ich die Werte von Typ an der Spitze wie im zweiten Beispiel habe? – akash87

+0

@ akash87: ziemlich einfach, check my edit;) – digEmAll