2015-05-29 79 views
8

我是R新手。我有admission_table包含ADMIT,GRE,GPARANKR - 將總結轉換爲數據。框架

> 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 

我試圖將此表的摘要轉換爲data.frame。我想要ADMITGREGPARANK作爲我的列標題。

> 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 

正如我試圖轉換爲data.frame,這是我得到的唯一結果。我想要的數據幀有確切的輸出就像彙總表,因爲在那之後我想用這行代碼插入到Oracle數據庫:

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

是在沒有辦法做到這一點?原諒我的壞英語,並提前致謝。

+0

難道你真的想要,準確的輸出?隨着'最低。 :0.0000'結構類型?或者是否會顯示一個表示統計數據的列,以及一個表明該值是否足夠的列? – A5C1D2H2I1M1N2O1R2T1

回答

18

你可以考慮unclass,我想:

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 " ... 

注意,有很多過度空白的存在,在這兩個名稱和值。

但是,它可能是足夠的做一些事情,如:

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

unclass正是我要找的。 TQ這麼多! –

+0

[broom package](https://cran.r-project.org/web/packages/broom/index.html)中的'tidy()'函數可用於將許多不同的彙總對象轉換爲data.frames 。 –

+0

該答案中的第二個解決方案比第1個好得多,因爲第1個解決方案不解析來自其行標籤的數字結果 –