Angenommen, ich möchte den Anteil verschiedener Werte innerhalb jeder Gruppe berechnen. Um zum Beispiel der Verwendung von mtcars
Daten, wie berechne ich die relative Häufigkeit der Anzahl der Gänge von Uhr (automatisch / manuell) in einem Rutsch mit dplyr
?
library(dplyr)
data(mtcars)
mtcars <- tbl_df(mtcars)
# count frequency
mtcars %>%
group_by(am, gear) %>%
summarise(n = n())
# am gear n
# 0 3 15
# 0 4 4
# 1 4 8
# 1 5 5
Was ich erreichen möchte:
am gear n rel.freq
0 3 15 0.7894737
0 4 4 0.2105263
1 4 8 0.6153846
1 5 5 0.3846154
prop.table()
/ zu suchensweep()
. Auch in anderen Fragen fragenAntworten:
Versuche dies:
Aus der dplyr-Vignette :
Somit wird nach dem
summarise
die letzte ingroup_by
'Zahnrad' angegebene Gruppierungsvariable abgezogen. Immutate
Schritt werden die Daten nach den verbleibenden Gruppierungsvariablen gruppiert, hier 'bin'. Sie können die Gruppierung in jedem Schritt mit überprüfengroups
.Das Ergebnis des Peelings hängt natürlich von der Reihenfolge der Gruppierungsvariablen im
group_by
Aufruf ab. Möglicherweise möchten Sie eine nachfolgendegroup_by(am)
Aktion ausführen, um Ihren Code deutlicher zu machen.Informationen zur Rundung und Verschönerung finden Sie in der netten Antwort von @Tyler Rinker.
quelle
sum(n)
über dieam
Gruppe und nicht auch über die Gruppe funktioniertgear
...summarise
, wird angezeigt, welche Gruppen noch übrig sind. Oh dplyr rockt ...Sie können die
count()
Funktion verwenden, die sich jedoch je nach Version von unterschiedlich verhältdplyr
:dplyr 0.7.1: Gibt eine nicht gruppierte Tabelle zurück: Sie müssen erneut nach gruppieren
am
dplyr <0.7.1: Gibt eine gruppierte Tabelle zurück, sodass keine erneute Gruppierung erforderlich ist, obwohl Sie dies möglicherweise
ungroup()
für spätere Manipulationen möchtendplyr 0.7.1
dplyr <0,7,1
Dies führt zu einer gruppierten Tabelle . Wenn Sie sie für weitere Analysen verwenden möchten, kann es hilfreich sein, das gruppierte Attribut mit zu entfernen
ungroup()
.quelle
dplyr
0.7.1 zu sein. Die Frequenzberechnung wird insgesamt für "Gang" durchgeführt, anstatt innerhalb jeder Stufe von "am".@ Henrik's ist besser für die Benutzerfreundlichkeit, da dadurch das Spaltenzeichen und nicht mehr numerisch wird, sondern mit dem übereinstimmt, wonach Sie gefragt haben ...
EDIT Da Spacedman danach gefragt :-)
quelle
format
Methode erstellen, die ein Prozentzeichen hinzufügt ... #overkillHier ist eine allgemeine Funktion zur Implementierung der Henrik-Lösung auf
dplyr
0.7.1.quelle
Error in bind_rows_(x, .id) : Column
am` kann nicht von numerisch in Zeichen umgewandeltIch habe eine kleine Funktion für diese sich wiederholende Aufgabe geschrieben:
Ich kann es dann wie folgt verwenden:
Es gibt zurück:
quelle
Trotz der vielen Antworten ein weiterer Ansatz, der
prop.table
in Kombination mitdplyr
oder verwendet wirddata.table
.quelle
Diese Antwort basiert auf Matifous Antwort.
Zuerst habe ich es geändert, um sicherzustellen, dass die freq-Spalte nicht als wissenschaftliche Notationsspalte zurückgegeben wird, indem ich die scipen-Option verwende.
Dann multipliziere ich die Antwort mit 100, um ein Prozent statt einer Dezimalstelle zu erhalten, damit die Freq-Spalte als Prozentsatz leichter lesbar ist.
quelle