HOWTO · R
So zählen Sie die Anzahl der Beobachtungen in R
Zählen Sie jede Zeile, Zeilen, die Bedingungen erfüllen, oder Vorkommen nach Gruppe in einem R-Data-Frame mit Base R und dplyr.
Auf dieser Seite
In einem R-Data-Frame ist eine Beobachtung eine Zeile. Verwenden Sie nrow() für die Gesamtzahl der Beobachtungen, eine logische Bedingung mit sum() für übereinstimmende Zeilen oder count() aus dplyr für Häufigkeiten nach Gruppe. Die Beispiele verwenden einen kleinen Data-Frame, damit Sie die Spaltennamen an Ihre eigenen Daten anpassen können.
Alle Zeilen mit nrow() zählen
nrow(data) gibt die Anzahl der Zeilen in data zurück. Das ist die direkte Wahl, wenn jede Zeile gezählt werden soll. Das Beispiel hat fünf Zeilen, und nrow(students) liefert den unten ausgegebenen Wert.
students <- data.frame(
name = c("Ada", "Ben", "Cam", "Dee", "Eli"),
passed = c(TRUE, FALSE, TRUE, TRUE, FALSE),
group = c("A", "A", "B", "B", "B")
)
total <- nrow(students)
cat("Total observations:", total, "\n")
Total observations: 5
Für eine Gesamtzeilenzahl ist nrow() klarer als das Konstruieren eines logischen Vektors. Insbesondere wertet with(data, 1) den Skalar 1 aus; es erzeugt nicht einen Wert für jede Zeile, sodass sum(with(data, 1)) keine Methode zum Zählen von Zeilen ist.
Zeilen zählen, die Bedingungen in Base R erfüllen
Um Zeilen zu zählen, die eine Bedingung erfüllen, erstellen Sie einen logischen Vektor und übergeben Sie ihn an sum(). In R trägt TRUE beim Summieren 1 und FALSE 0 bei. Mit with() können Sie auf Data-Frame-Spalten verweisen, ohne den Namen des Data-Frames zu wiederholen:
sum(with(students, passed))
Kombinieren Sie mehrere Bedingungen mit & für „und" oder | für „oder". Beispielsweise zählt sum(with(students, passed & group == "B")) die Studierenden, die bestanden haben und zur Gruppe B gehören. Verwenden Sie Klammern, wenn sie eine kombinierte Bedingung leichter lesbar machen.
Wenn eine Bedingung NA enthält, gibt sum() NA zurück, sofern Sie diese Werte nicht behandeln. Verwenden Sie na.rm = TRUE, wenn unbekannte Werte von der Zählung ausgeschlossen werden sollen, wie in sum(students$passed, na.rm = TRUE). Bei einem Ausdruck wie students$score > 70 werden damit nur bekannte Punktzahlen über 70 gezählt; fehlende Punktzahlen werden nicht als Treffer behandelt.
Sie können auch eine Teilmenge des Data-Frames bilden und deren resultierende Zeilen mit nrow() zählen:
nrow(students[students$passed, , drop = FALSE])
Das Argument drop = FALSE behält die Teilmenge in Data-Frame-Form, selbst wenn sie nur eine Spalte enthält. Wenn die Bedingung NA enthalten kann, entfernen Sie zuerst die unbekannten Zeilen aus dem logischen Index, zum Beispiel students[!is.na(students$passed) & students$passed, , drop = FALSE]; andernfalls kann Base R für eine unbekannte Bedingung eine Zeile nur aus NA einfügen. Verwenden Sie diesen Ansatz, wenn Sie die gefilterten Zeilen für spätere Arbeit benötigen; verwenden Sie sum(), wenn Sie nur die Anzahl benötigen. Ein weiteres Beispiel mit Filtern und anschließendem Zeilenzählen finden Sie unter Zeilen nach Gruppe zählen.
Zeilen und Gruppen mit dplyr zählen
dplyr stellt filter() zum Auswählen von Zeilen und count() bereit, um zu berichten, wie viele Zeilen in jeder Gruppe vorkommen. Diese Operationen beantworten unterschiedliche Fragen: Verwenden Sie filter() gefolgt von nrow() für die Anzahl der Zeilen, die eine Bedingung erfüllen, und count(), wenn Sie eine Häufigkeit für jeden Wert oder jede Kombination von Werten möchten.
Beispielsweise zählt nrow(dplyr::filter(students, passed)) die Studierenden, deren passed-Wert TRUE ist; filter() verwirft Zeilen, wenn seine Bedingung NA ist. Um Beobachtungen in jeder Gruppe zu zählen, verwenden Sie dplyr::count(students, group). Um Kombinationen zu zählen, geben Sie weitere Gruppierungsspalten an, wie in dplyr::count(students, group, passed). Diese Aufrufe dienen der Veranschaulichung und werden hier nicht ausgeführt; die mitgelieferte Laufzeit-Evidenz deckt nur das Beispiel mit der Gesamtzeilenzahl ab.
count() gibt die Gruppierungsspalten und standardmäßig eine Zählspalte namens n zurück. Sein Argument wt summiert stattdessen eine Gewichtungsspalte innerhalb jeder Gruppe, was eine gewichtete Summe und keine gewöhnliche Zeilenanzahl ist. Für eine einfache Beobachtungszählung lassen Sie wt ungesetzt.
Wählen Sie die Methode, die zu Ihrer Frage passt
- Verwenden Sie
nrow(data), um jede Zeile zu zählen. - Verwenden Sie
sum(condition)odernrow(data[condition, , drop = FALSE]), um durch eine Bedingung ausgewählte Zeilen zu zählen. - Verwenden Sie
filter()undnrow(), wenn Sie gefilterte Zeilen mitdplyrzählen möchten; verwenden Siecount(), wenn Sie Häufigkeiten nach Gruppe möchten.
Diese Auswahl hält die Bedeutung des Ergebnisses explizit: Gesamtzeilen, Zeilen, die eine Bedingung erfüllen, oder eine Häufigkeitstabelle. Prüfen Sie, ob die in einer Bedingung oder einem Gruppierungsausdruck verwendeten Spalten die Werte darstellen, die Sie zählen möchten.