2015-05-29 29 views
8

Ich bin neu in R. Ich habe dieses admission_table enthält ADMIT, GRE, GPA und RANK.R - Zusammenfassung in data.frame konvertieren

> head(admission_table) 
    ADMIT GRE GPA RANK 
1  0 380 3.61 3 
2  1 660 3.67 3 
3  1 800 4.00 1 
4  1 640 3.19 4 
5  0 520 2.93 4 
6  1 760 3.00 2 

Ich versuche, die Zusammenfassung dieser Tabelle in data.frame zu konvertieren. Ich möchte ADMIT, GRE, GPA und RANK als meine Spaltenüberschriften haben.

> summary(admission_table) 
    ADMIT    GRE    GPA    RANK  
Min. :0.0000 Min. :220.0 Min. :2.260 Min. :1.000 
1st Qu.:0.0000 1st Qu.:520.0 1st Qu.:3.130 1st Qu.:2.000 
Median :0.0000 Median :580.0 Median :3.395 Median :2.000 
Mean :0.3175 Mean :587.7 Mean :3.390 Mean :2.485 
3rd Qu.:1.0000 3rd Qu.:660.0 3rd Qu.:3.670 3rd Qu.:3.000 
Max. :1.0000 Max. :800.0 Max. :4.000 Max. :4.000 

> as.data.frame(summary(admission_table)) 
    Var1  Var2    Freq 
1   ADMIT Min. :0.0000 
2   ADMIT 1st Qu.:0.0000 
3   ADMIT Median :0.0000 
4   ADMIT Mean :0.3175 
5   ADMIT 3rd Qu.:1.0000 
6   ADMIT Max. :1.0000 
7    GRE Min. :220.0 
8    GRE 1st Qu.:520.0 
9    GRE Median :580.0 
10   GRE Mean :587.7 
11   GRE 3rd Qu.:660.0 
12   GRE Max. :800.0 
13   GPA Min. :2.260 
14   GPA 1st Qu.:3.130 
15   GPA Median :3.395 
16   GPA Mean :3.390 
17   GPA 3rd Qu.:3.670 
18   GPA Max. :4.000 
19   RANK Min. :1.000 
20   RANK 1st Qu.:2.000  
21   RANK Median :2.000 
22   RANK Mean :2.485 
23   RANK 3rd Qu.:3.000 
24   RANK Max. :4.000 

Als ich in data.frame zu konvertieren bin versucht, ist dies das einzige Ergebnis, das ich bekommen. Ich mag der Datenrahmen die exakte Ausgabe ebenso wie die Übersichtstabelle hat, weil nach, dass ich das in Oracle-Datenbank mit dieser Codezeile eingefügt werden soll:

dbWriteTable(connection,name="SUM_ADMISSION_TABLE",value=as.data.frame(summary(admission_table)),row.names = FALSE, overwrite = TRUE ,append = FALSE) 

Ist das eine Möglichkeit, dies zu tun? Verzeih mein schlechtes Englisch und danke im Voraus.

+0

Wollen Sie wirklich, dass genaue Ausgang? Mit dem 'min. : 0.0000' Art der Struktur? Oder würde eine Spalte den Status anzeigen und eine Spalte, die den Wert angibt, ausreichend sein? – A5C1D2H2I1M1N2O1R2T1

Antwort

18

Sie unclass betrachten kann, nehme ich an:

data.frame(unclass(summary(mydf)), check.names = FALSE, stringsAsFactors = FALSE) 
#    ADMIT    GRE    GPA   RANK 
# 1 Min. :0.0000 Min. :380.0 Min. :2.930 Min. :1.000 
# 2 1st Qu.:0.2500 1st Qu.:550.0 1st Qu.:3.047 1st Qu.:2.250 
# 3 Median :1.0000 Median :650.0 Median :3.400 Median :3.000 
# 4 Mean :0.6667 Mean :626.7 Mean :3.400 Mean :2.833 
# 5 3rd Qu.:1.0000 3rd Qu.:735.0 3rd Qu.:3.655 3rd Qu.:3.750 
# 6 Max. :1.0000 Max. :800.0 Max. :4.000 Max. :4.000 
str(.Last.value) 
# 'data.frame': 6 obs. of 4 variables: 
# $  ADMIT: chr "Min. :0.0000 " "1st Qu.:0.2500 " "Median :1.0000 " "Mean :0.6667 " ... 
# $  GRE : chr "Min. :380.0 " "1st Qu.:550.0 " "Median :650.0 " "Mean :626.7 " ... 
# $  GPA : chr "Min. :2.930 " "1st Qu.:3.047 " "Median :3.400 " "Mean :3.400 " ... 
# $  RANK: chr "Min. :1.000 " "1st Qu.:2.250 " "Median :3.000 " "Mean :2.833 " ... 

Beachten Sie, dass es dort viele übermäßige Leerzeichen ist, sowohl in den Namen und den Werten.

Allerdings könnte es ausreichend sein, wie etwas zu tun:

do.call(cbind, lapply(mydf, summary)) 
#   ADMIT GRE GPA RANK 
# Min. 0.0000 380.0 2.930 1.000 
# 1st Qu. 0.2500 550.0 3.048 2.250 
# Median 1.0000 650.0 3.400 3.000 
# Mean 0.6667 626.7 3.400 2.833 
# 3rd Qu. 1.0000 735.0 3.655 3.750 
# Max. 1.0000 800.0 4.000 4.000 
+0

unklass ist genau das, was ich suche. TQ so sehr! –

+0

Mit der Funktion 'tidy()' aus dem [broom package] (https://cran.r-project.org/web/packages/broom/index.html) können viele verschiedene Zusammenfassungsobjekte in data.frames konvertiert werden . –

+0

Die zweite Lösung in dieser Antwort ist viel besser als die erste, da die erste Lösung die numerischen Ergebnisse nicht von ihren Zeilenbeschriftungen analysiert –