Kennt jemand ein R-Äquivalent zu SAS PROC FREQ
?
Ich versuche, zusammenfassende beschreibende Statistiken für mehrere Variablen gleichzeitig zu generieren.
Kennt jemand ein R-Äquivalent zu SAS PROC FREQ
?
Ich versuche, zusammenfassende beschreibende Statistiken für mehrere Variablen gleichzeitig zu generieren.
Antworten:
Ich benutze table
und prop.table
, aber CrossTable
in dem gmodels
Paket können Sie Ergebnisse noch näher an SAS geben. Siehe diesen Link .
Um ausserdem "beschreibende Statistiken für mehrere Variablen gleichzeitig zu erstellen", würden Sie die summary
Funktion verwenden. zB summary(mydata)
.
Das Zusammenfassen von Daten in Base R bereitet nur Kopfzerbrechen. Dies ist einer der Bereiche, in denen SAS recht gut funktioniert. Für R empfehle ich das plyr
Paket.
In 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;
mit plyr
:
smry <- ddply(dat, .(a, b), summarise, xmean=mean(x), ymean=mean(y), yvar=var(y))
Ich benutze kein SAS. SAS PROC FREQ
Daher kann ich nicht kommentieren, ob das folgende Replikat vorhanden ist , aber dies sind zwei schnelle Strategien zum Beschreiben von Variablen in einem data.frame, die ich häufig verwende:
describe
in Hmisc
bietet eine nützliche Zusammenfassung von Variablen, einschließlich numerischer und nicht numerischer Datendescribe
in psych
bietet beschreibende Statistiken für numerische Daten> library(MASS) # provides dataset called "survey"
> library(Hmisc) # Hmisc describe
> library(psych) # psych describe
Folgendes ist die Ausgabe von 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]
Nachfolgend sehen Sie die Ausgabe psych
describe
für die numerischen Variablen:
> 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
Ich verwende die Codebuchfunktion von {EPICALC}, die zusammenfassende Statistiken für eine numerische Variable und eine Häufigkeitstabelle mit Ebenenbezeichnungen und Codes für Faktoren enthält. http://cran.r-project.org/doc/contrib/Epicalc_Book.pdf (siehe S.50) Darüber hinaus ist dies sehr nützlich, da es SD für quantitative Variablen bereitstellt.
Genießen !
codebook()
wird. Ein Problem ist, dass na
s gelöscht werden, was Sie möglicherweise in Ihre Ausgabe aufnehmen möchten. Eine Möglichkeit, mit diesem Problem umzugehen (zumindest mit Faktoren), besteht darin ,? Recode.is.na 1st zu verwenden (z. B. "missing"). Für numerische Variablen können Sie unmittelbar links von der Spalte eine neue Variable mit einem darauf basierenden logischen Wert erstellen is.na()
und dann ausführen codebook()
. Es ist allerdings ein bisschen kluge.
Sie können sich mein Summarytools- Paket ( CRAN-Link ) ansehen , das eine Codebuch-ähnliche Funktion mit Markdown- und HTML-Formatierungsoptionen enthält.
install.packages("summarytools")
library(summarytools)
dfSummary(CO2, style = "grid", plain.ascii = TRUE)
+------------+---------------+-------------------------------------+--------------------+-----------+
| 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) | | |
+------------+---------------+-------------------------------------+--------------------+-----------+
BEARBEITEN
In neueren Versionen von Summarytools akzeptiert die freq()
Funktion (die einfache Häufigkeitstabellen erstellt, die in Bezug auf die ursprüngliche Frage auf den Punkt gebracht werden) sowohl Datenrahmen als auch einzelne Variablen. Für Kreuztabellen (was auch proc freq tut), siehe die ctable()
Funktion.
freq(CO2)
Typ : Bestellfaktor
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 $ Typ
Typ : 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
CO2 $ Behandlung
Typ : 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
Vielen Dank für all die Vorschläge an alle. Am Ende habe ich entweder Tabelle oder Rcmdrs numSummary-Funktion verwendet und Folgendes angewendet:
apply(dataframe[,c('need_rbcs','need_platelets','need_ffp')],2,table)
Das funktioniert ganz gut und ist nicht zu umständlich. Allerdings werde ich auf jeden Fall einige dieser anderen Lösungen ausprobieren!