Có R tương đương với SAS PROC FREQ không?


18

Có ai biết R tương đương với SAS PROC FREQkhông?

Tôi đang cố gắng tạo số liệu thống kê mô tả tóm tắt cho nhiều biến số cùng một lúc.


2
Tại sao câu hỏi này được đóng lại? Nó liên quan đến trực quan hóa dữ liệu và tạo ra một số phản hồi đáng giá.
z0lo

Câu trả lời:


12

Tôi sử dụng tableprop.table, nhưng CrossTabletrong gmodelsgói có thể cung cấp cho bạn kết quả gần hơn với SAS. Xem liên kết này .

Ngoài ra, để tạo "thống kê mô tả cho nhiều biến số cùng một lúc", bạn sẽ sử dụng summaryhàm; ví dụ summary(mydata).


Ngoài ra, tôi nhiệt liệt giới thiệu gói vcd , nhưng hãy xem họa tiết đi kèm: Làm việc với dữ liệu phân loại với R và các gói vcd và vcdExtra .
chl

9

Tóm tắt dữ liệu trong cơ sở R chỉ là một vấn đề đau đầu. Đây là một trong những lĩnh vực mà SAS hoạt động khá tốt. Đối với R, tôi đề nghị plyrgói.

Trong SAS:

/* tabulate by a and b, with summary stats for x and y in each cell */
proc summary data=dat nway;
  class a b;
  var x y;
  output out=smry mean(x)=xmean mean(y)=ymean var(y)=yvar;
run;

với plyr:

smry <- ddply(dat, .(a, b), summarise, xmean=mean(x), ymean=mean(y), yvar=var(y))

8

Tôi không sử dụng SAS; vì vậy tôi không thể nhận xét về việc sao chép sau đây SAS PROC FREQ, nhưng đây là hai chiến lược nhanh để mô tả các biến trong một data.frame mà tôi thường sử dụng:

  • describein Hmisccung cấp một bản tóm tắt hữu ích về các biến bao gồm dữ liệu số và không số
  • describetrong psychcung cấp số liệu thống kê mô tả cho dữ liệu số

Ví dụ R

> library(MASS) # provides dataset called "survey"
> library(Hmisc) # Hmisc describe
> library(psych) # psych describe

Sau đây là đầu ra của Hmisc describe:

> Hmisc::describe(survey)
survey 

 12  Variables      237  Observations
----------------------------------------------------------------------------------------------------------------------
Sex 
      n missing  unique 
    236       1       2 

Female (118, 50%), Male (118, 50%) 
----------------------------------------------------------------------------------------------------------------------
Wr.Hnd 
      n missing  unique    Mean     .05     .10     .25     .50     .75     .90     .95 
    236       1      60   18.67   16.00   16.50   17.50   18.50   19.80   21.15   22.05 

lowest : 13.0 14.0 15.0 15.4 15.5, highest: 22.5 22.8 23.0 23.1 23.2 
----------------------------------------------------------------------------------------------------------------------
NW.Hnd 
      n missing  unique    Mean     .05     .10     .25     .50     .75     .90     .95 
    236       1      68   18.58   15.50   16.30   17.50   18.50   19.72   21.00   22.22 

lowest : 12.5 13.0 13.3 13.5 15.0, highest: 22.7 23.0 23.2 23.3 23.5 
----------------------------------------------------------------------------------------------------------------------
[ABBREVIATED OUTPUT]

Sau đó, dưới đây là đầu ra của psych describecho các biến số:

> psych::describe(survey[,sapply(survey, class) %in% c("numeric", "integer") ])
       var   n   mean    sd median trimmed   mad    min   max range  skew kurtosis   se
Wr.Hnd   1 236  18.67  1.88  18.50   18.61  1.48  13.00  23.2 10.20  0.18     0.36 0.12
NW.Hnd   2 236  18.58  1.97  18.50   18.55  1.63  12.50  23.5 11.00  0.02     0.51 0.13
Pulse    3 192  74.15 11.69  72.50   74.02 11.12  35.00 104.0 69.00 -0.02     0.41 0.84
Height   4 209 172.38  9.85 171.00  172.19 10.08 150.00 200.0 50.00  0.22    -0.39 0.68
Age      5 237  20.37  6.47  18.58   18.99  1.61  16.75  73.0 56.25  5.16    34.53 0.42

3

Tôi sử dụng hàm codebook từ {EPICALC} để cung cấp số liệu thống kê tóm tắt cho một biến số và bảng tần số với nhãn mức và mã cho các yếu tố. http://cran.r-project.org/doc/contrib/Epicalc_Book.pdf (xem trang 50) Hơn nữa, điều này rất hữu ích vì nó cung cấp sd cho các biến định lượng.

Thưởng thức !

đầu ra mẫu


1
+1 (từ trước đó). Tôi thực sự thích cách codebook()đặt ra điều này. 1 vấn đề là nas bị loại bỏ, mà bạn có thể muốn đưa vào đầu ra của mình. 1 cách để đối phó với điều này (ít nhất là w / yếu tố) là sử dụng ? Recode.is.na 1st (ví dụ: "mất tích"); đối với các biến số, bạn có thể tạo một biến mới ngay bên trái cột với giá trị logic dựa trên is.na(), sau đó chạy codebook(). Đó là một chút của một kluge, mặc dù.
gung - Phục hồi Monica

3

Bạn có thể kiểm tra gói tóm tắt của tôi ( liên kết CRAN ) bao gồm chức năng giống như cuốn sách mã, với các tùy chọn định dạng đánh dấu và html.

install.packages("summarytools")
library(summarytools)
dfSummary(CO2, style = "grid", plain.ascii = TRUE)

Tóm tắt dữ liệu

CO2

+------------+---------------+-------------------------------------+--------------------+-----------+
| Variable   | Properties    | Stats / Values                      | Freqs, % Valid     | N Valid   |
+============+===============+=====================================+====================+===========+
| Plant      | type:integer  | 1. Qn1                              | 1: 7 (8.3%)        | 84/84     |
|            | class:ordered | 2. Qn2                              | 2: 7 (8.3%)        | (100.0%)  |
|            | + factor      | 3. Qn3                              | 3: 7 (8.3%)        |           |
|            |               | 4. Qc1                              | 4: 7 (8.3%)        |           |
|            |               | 5. Qc3                              | 5: 7 (8.3%)        |           |
|            |               | 6. Qc2                              | 6: 7 (8.3%)        |           |
|            |               | 7. Mn3                              | 7: 7 (8.3%)        |           |
|            |               | 8. Mn2                              | 8: 7 (8.3%)        |           |
|            |               | 9. Mn1                              | 9: 7 (8.3%)        |           |
|            |               | 10. Mc2                             | 10: 7 (8.3%)       |           |
|            |               | ... 2 other levels                  | others: 14 (16.7%) |           |
+------------+---------------+-------------------------------------+--------------------+-----------+
| Type       | type:integer  | 1. Quebec                           | 1: 42 (50%)        | 84/84     |
|            | class:factor  | 2. Mississippi                      | 2: 42 (50%)        | (100.0%)  |
+------------+---------------+-------------------------------------+--------------------+-----------+
| Treatment  | type:integer  | 1. nonchilled                       | 1: 42 (50%)        | 84/84     |
|            | class:factor  | 2. chilled                          | 2: 42 (50%)        | (100.0%)  |
+------------+---------------+-------------------------------------+--------------------+-----------+
| conc       | type:double   | mean (sd) = 435 (295.92)            | 95: 12 (14.3%)     | 84/84     |
|            | class:numeric | min < med < max = 95 < 350 < 1000   | 175: 12 (14.3%)    | (100.0%)  |
|            |               | IQR (CV) = 500 (0.68)               | 250: 12 (14.3%)    |           |
|            |               |                                     | 350: 12 (14.3%)    |           |
|            |               |                                     | 500: 12 (14.3%)    |           |
|            |               |                                     | 675: 12 (14.3%)    |           |
|            |               |                                     | 1000: 12 (14.3%)   |           |
+------------+---------------+-------------------------------------+--------------------+-----------+
| uptake     | type:double   | mean (sd) = 27.21 (10.81)           | 76 distinct values | 84/84     |
|            | class:numeric | min < med < max = 7.7 < 28.3 < 45.5 |                    | (100.0%)  |
|            |               | IQR (CV) = 19.23 (0.4)              |                    |           |
+------------+---------------+-------------------------------------+--------------------+-----------+

CHỈNH SỬA

Trong các phiên bản mới hơn của tóm tắt , freq()hàm (tạo ra các bảng tần số đơn giản, nhiều điểm hơn so với câu hỏi ban đầu) chấp nhận các khung dữ liệu cũng như các biến đơn. Đối với các bảng chéo (mà Proc freq cũng làm), hãy xem ctable()hàm.

freq(CO2)

Thường xuyên

Nhà máy CO2 $

Loại : Yếu tố đặt hàng

          Freq   % Valid    % Valid Cum   % Total    % Total Cum
    Qn1      7      8.33           8.33      8.33           8.33
    Qn2      7      8.33          16.67      8.33          16.67
    Qn3      7      8.33          25.00      8.33          25.00
    Qc1      7      8.33          33.33      8.33          33.33
    Qc3      7      8.33          41.67      8.33          41.67
    Qc2      7      8.33          50.00      8.33          50.00
    Mn3      7      8.33          58.33      8.33          58.33
    Mn2      7      8.33          66.67      8.33          66.67
    Mn1      7      8.33          75.00      8.33          75.00
    Mc2      7      8.33          83.33      8.33          83.33
    Mc3      7      8.33          91.67      8.33          91.67
    Mc1      7      8.33         100.00      8.33         100.00
   <NA>      0                               0.00         100.00
  Total     84    100.00         100.00    100.00         100.00
Loại CO2 $

Loại : Yếu tố

                Freq   % Valid    % Valid Cum   % Total    % Total Cum
       Quebec     42     50.00          50.00     50.00          50.00
  Mississippi     42     50.00         100.00     50.00         100.00
         <NA>      0                               0.00         100.00
        Total     84    100.00         100.00    100.00         100.00
CO2 $ Điều trị

Loại : Yếu tố

               Freq   % Valid    % Valid Cum   % Total    % Total Cum
  nonchilled     42     50.00          50.00     50.00          50.00
     chilled     42     50.00         100.00     50.00         100.00
        <NA>      0                               0.00         100.00
       Total     84    100.00         100.00    100.00         100.00

2

Cảm ơn tất cả những lời đề nghị tất cả mọi người. Tôi đã kết thúc bằng cách sử dụng chức năng numSummary của bảng hoặc Rcmdr cộng với:

apply(dataframe[,c('need_rbcs','need_platelets','need_ffp')],2,table) 

Điều này hoạt động khá tốt và không quá bất tiện. Tuy nhiên tôi chắc chắn sẽ thử một số giải pháp khác!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.