2015-05-29 16 views
8

Tôi mới có R. Tôi có số này admission_table chứa ADMIT, GRE, GPARANK.R - chuyển đổi tóm tắt thành data.frame

> 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 

Tôi đang cố chuyển đổi tóm tắt của bảng này thành data.frame. Tôi muốn có ADMIT, GRE, GPARANK làm tiêu đề cột của tôi.

> 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 

Vì tôi đang cố gắng chuyển đổi thành data.frame, đây là kết quả duy nhất tôi nhận được. Tôi muốn khung dữ liệu có đầu ra chính xác giống như bảng tóm tắt vì sau đó tôi muốn chèn vào cơ sở dữ liệu Oracle bằng cách sử dụng dòng mã sau:

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

Có cách nào để làm như vậy không? Tha thứ cho tiếng anh xấu của tôi và cảm ơn trước.

+0

Bạn có thực sự muốn điều đó đầu ra chính xác? Với 'Min. : 0.0000' loại cấu trúc? Hay một cột cho biết chỉ số, và một cột cho biết giá trị là đủ? – A5C1D2H2I1M1N2O1R2T1

Trả lời

18

Bạn có thể xem xét unclass, Tôi cho rằng:

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

Lưu ý rằng có rất nhiều khoảng trắng quá mức đó, trong cả hai tên và các giá trị.

Tuy nhiên, nó có thể là đủ để làm một cái gì đó như:

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 là chính xác những gì tôi đang tìm kiếm. TQ rất nhiều! –

+0

Chức năng 'tidy()' từ [gói chổi] (https://cran.r-project.org/web/packages/broom/index.html) có thể được sử dụng để chuyển đổi nhiều đối tượng tóm tắt khác nhau thành data.frames . –

+0

Giải pháp thứ 2 trong câu trả lời này tốt hơn nhiều so với giải pháp thứ nhất vì số 1 không phân tích các kết quả dạng số từ các nhãn hàng của chúng –

Các vấn đề liên quan