J'utilise l'ensemble de données mtcars
. Je veux trouver le nombre d'enregistrements pour une combinaison particulière de données. Quelque chose de très similaire à la clause count(*)
group by dans SQL. ddply()
de plyr travaille pour moi
library(plyr)
ddply(mtcars, .(cyl,gear),nrow)
a sortie
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
Utiliser ce code
library(dplyr)
g <- group_by(mtcars, cyl, gear)
summarise(g, length(gear))
a sortie
length(cyl)
1 32
J'ai trouvé diverses fonctions à transmettre à summarise()
mais aucune ne semble fonctionner pour moi. Une fonction que j'ai trouvée est sum(G)
, qui est retournée
Error in eval(expr, envir, enclos) : object 'G' not found
Essayé en utilisant n()
, qui est retourné
Error in n() : This function should not be called directly
Qu'est-ce que je fais mal? Comment puis-je faire fonctionner group_by()
/summarise()
pour moi?
Il y a une fonction spéciale n()
dans dplyr pour compter les lignes (potentiellement au sein de groupes):
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
Mais dplyr propose également une fonction pratique count
qui fait exactement la même chose avec moins de frappe:
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
une autre approche consiste à utiliser les doubles points:
mtcars %>%
dplyr::group_by(cyl, gear) %>%
dplyr::summarise(length(gear))
Une autre option, pas nécessairement plus élégante, mais ne nécessite pas de se référer à une colonne spécifique:
mtcars %>%
group_by(cyl, gear) %>%
do(data.frame(nrow=nrow(.)))
Je pense que ce que vous recherchez est comme suit.
cars_by_cylinders_gears <- mtcars %>%
group_by(cyl, gear) %>%
summarise(count = n())
Ceci utilise le paquet dplyr. Il s'agit essentiellement de la version longue de la solution count () fournie par docendo discimus.