Ich verwende das mtcars
-Dataset. Ich möchte die Anzahl der Datensätze für eine bestimmte Datenkombination ermitteln. Etwas, das der Klausel count(*)
group by in SQL sehr ähnlich ist. ddply()
von plyr arbeitet für mich
library(plyr)
ddply(mtcars, .(cyl,gear),nrow)
hat Ausgabe
cyl gear V1
1 4 3 1
2 4 4 8
3 4 5 2
4 6 3 2
5 6 4 4
6 6 5 1
7 8 3 12
8 8 5 2
Verwenden Sie diesen Code
library(dplyr)
g <- group_by(mtcars, cyl, gear)
summarise(g, length(gear))
hat Ausgabe
length(cyl)
1 32
Ich habe verschiedene Funktionen gefunden, die an summarise()
übergeben werden können, aber scheinbar keine für mich funktionieren. Eine Funktion, die ich gefunden habe, ist sum(G)
, die zurückgegeben wurde
Error in eval(expr, envir, enclos) : object 'G' not found
Versuchte mit n()
, die zurückkehrte
Error in n() : This function should not be called directly
Was mache ich falsch? Wie kann ich group_by()
/summarise()
für mich arbeiten lassen?
Es gibt eine spezielle Funktion n()
in dplyr, um Zeilen zu zählen (möglicherweise innerhalb von Gruppen):
library(dplyr)
mtcars %>%
group_by(cyl, gear) %>%
summarise(n = n())
#Source: local data frame [8 x 3]
#Groups: cyl [?]
#
# cyl gear n
# (dbl) (dbl) (int)
#1 4 3 1
#2 4 4 8
#3 4 5 2
#4 6 3 2
#5 6 4 4
#6 6 5 1
#7 8 3 12
#8 8 5 2
Dplyr bietet aber auch eine praktische count
-Funktion, die mit weniger Tippen genau das gleiche tut:
count(mtcars, cyl, gear) # or mtcars %>% count(cyl, gear)
#Source: local data frame [8 x 3]
#Groups: cyl [?]
#
# cyl gear n
# (dbl) (dbl) (int)
#1 4 3 1
#2 4 4 8
#3 4 5 2
#4 6 3 2
#5 6 4 4
#6 6 5 1
#7 8 3 12
#8 8 5 2
ein anderer Ansatz ist die Verwendung der Doppelpunkte:
mtcars %>%
dplyr::group_by(cyl, gear) %>%
dplyr::summarise(length(gear))
Eine andere Option, die nicht unbedingt eleganter ist, jedoch nicht auf eine bestimmte Spalte verweisen muss:
mtcars %>%
group_by(cyl, gear) %>%
do(data.frame(nrow=nrow(.)))
Ich denke, was Sie suchen, ist wie folgt.
cars_by_cylinders_gears <- mtcars %>%
group_by(cyl, gear) %>%
summarise(count = n())
Dies verwendet das dplyr-Paket. Dies ist im Wesentlichen die Langversion der count () - Lösung von docendo discimus.