Apakah ada R yang setara dengan SAS PROC FREQ?


18

Adakah yang tahu R setara dengan SAS PROC FREQ?

Saya mencoba untuk menghasilkan statistik deskriptif ringkasan untuk beberapa variabel sekaligus.


2
Mengapa pertanyaan ini ditutup? Ini berkaitan dengan visualisasi data dan menghasilkan beberapa tanggapan yang bermanfaat.
z0lo

Jawaban:



9

Merangkum data dalam basis R hanyalah sakit kepala. Ini adalah salah satu area di mana SAS bekerja dengan sangat baik. Untuk R, saya merekomendasikan plyrpaket.

Dalam 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;

dengan plyr:

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

8

Saya tidak menggunakan SAS; jadi saya tidak bisa berkomentar apakah replikasi berikut SAS PROC FREQ, tetapi ini adalah dua strategi cepat untuk menggambarkan variabel dalam data.frame yang sering saya gunakan:

  • describein Hmiscmenyediakan ringkasan variabel yang berguna termasuk data numerik dan non-numerik
  • describedi psychmenyediakan statistik deskriptif untuk data numerik

Contoh R

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

Berikut ini adalah output dari 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]

Kemudian di bawah ini adalah output dari psych describeuntuk variabel numerik:

> 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

Saya menggunakan fungsi codebook dari {EPICALC} yang memberikan statistik ringkasan untuk variabel numerik dan tabel frekuensi dengan label level dan kode untuk faktor. http://cran.r-project.org/doc/contrib/Epicalc_Book.pdf (lihat hal.50) Selain itu, ini sangat berguna karena menyediakan sd untuk variabel kuantitatif.

Nikmati !

output sampel


1
+1 (dari sebelumnya). Saya sangat suka cara codebook()memaparkan ini. Masalahnya adalah nas dijatuhkan, yang mungkin ingin Anda sertakan dalam output Anda. 1 cara untuk berurusan dengan ini (setidaknya dengan faktor) adalah dengan menggunakan ? Recode.is.na 1st (misalnya, untuk "hilang"); untuk variabel numerik, Anda dapat membuat variabel baru segera di sebelah kiri kolom dengan nilai logis berdasarkan is.na(), lalu jalankan codebook(). Tapi ini agak kluge.
gung - Reinstate Monica

3

Anda dapat memeriksa paket summarytools ( tautan CRAN ) saya yang mencakup fungsi seperti buku kode, dengan opsi pemformatan markdown dan html.

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

Ringkasan Bingkai Data

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)              |                    |           |
+------------+---------------+-------------------------------------+--------------------+-----------+

EDIT

Dalam versi ringkasantools yang lebih baru , freq()fungsi (yang menghasilkan tabel frekuensi langsung, lebih to-the-point sehubungan dengan pertanyaan asli) menerima bingkai data serta variabel tunggal. Untuk tabulasi silang (yang juga Frekuensi proc ), lihat ctable()fungsinya.

freq(CO2)

Frekuensi

CO2 $ Plant

Jenis : Faktor Pemesanan

          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
CO2 $ Type

Jenis : Faktor

                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
Pengobatan CO2 $

Jenis : Faktor

               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

Terima kasih untuk semua saran semua orang. Saya akhirnya menggunakan tabel atau fungsi numSummary Rcmdr plus berlaku:

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

Ini bekerja dengan cukup baik dan tidak terlalu merepotkan. Namun saya pasti akan mencoba beberapa solusi lain ini!

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.