J'ai un data.frame mydf
avec environ 2500 lignes. Ces lignes correspondent à 69 classes d'objets dans la colonne 1 mydf$V1
, et je veux compter le nombre de lignes que j'ai par classe d'objet. Je peux avoir un facteur de ces classes avec:
objectclasses = unique(factor(mydf$V1, exclude="1"));
Quelle est la façon la plus rapide de compter les lignes par classe d'objet? Si c'était un autre langage, je parcourrais un tableau avec une boucle et je comptais, mais je suis nouveau en programmation R et j'essaie de tirer parti des opérations vectorisées de R.
Ou en utilisant la bibliothèque dplyr
:
library(dplyr)
set.seed(1)
dat <- data.frame(ID = sample(letters,100,rep=TRUE))
dat %>%
group_by(ID) %>%
summarise(no_rows = length(ID))
Notez l'utilisation de %>%
, qui est similaire à l'utilisation de tuyaux dans bash. Effectivement, le code ci-dessus canalise dat
dans group_by
, et le résultat de cette opération est transféré dans summarise
.
Le résultat est:
Source: local data frame [26 x 2]
ID no_rows
1 a 2
2 b 3
3 c 3
4 d 3
5 e 2
6 f 4
7 g 6
8 h 1
9 i 6
10 j 5
11 k 6
12 l 4
13 m 7
14 n 2
15 o 2
16 p 2
17 q 5
18 r 4
19 s 5
20 t 3
21 u 8
22 v 4
23 w 5
24 x 4
25 y 3
26 z 1
Voir dplyr
introduction pour un peu plus de contexte et la documentation pour plus de détails sur les fonctions individuelles.
Voici 2 façons de le faire:
set.seed(1)
tt <- sample(letters,100,rep=TRUE)
## using table
table(tt)
tt
a b c d e f g h i j k l m n o p q r s t u v w x y z
2 3 3 3 2 4 6 1 6 5 6 4 7 2 2 2 5 4 5 3 8 4 5 4 3 1
## using tapply
tapply(tt,tt,length)
a b c d e f g h i j k l m n o p q r s t u v w x y z
2 3 3 3 2 4 6 1 6 5 6 4 7 2 2 2 5 4 5 3 8 4 5 4 3 1
Utilisation du package plyr
:
library(plyr)
count(mydf$V1)
Il vous retournera une fréquence de chaque valeur.
En utilisant data.table
library(data.table)
setDT(dat)[, .N, keyby=ID] #(Using @Paul Hiemstra's `dat`)
Ou en utilisant dplyr 0.3
res <- count(dat, ID)
head(res)
#Source: local data frame [6 x 2]
# ID n
#1 a 2
#2 b 3
#3 c 3
#4 d 3
#5 e 2
#6 f 4
Ou
dat %>%
group_by(ID) %>%
tally()
Ou
dat %>%
group_by(ID) %>%
summarise(n=n())
Nous pouvons utiliser la colonne de facteur summary
sur:
summary(myDF$factorColumn)
Une autre approche consisterait à appliquer la fonction n()) qui compte le nombre d'observations
library(dplyr)
library(magrittr)
data %>%
group_by(columnName) %>%
summarise(Count = n())
Utilisez le paquet plyr avec lapply pour obtenir des fréquences pour chaque valeur (niveau) et chaque variable (facteur) de votre trame de données.
library(plyr)
lapply(df, count)
Si je veux juste savoir combien de niveaux de facteurs uniques existent dans les données, j'utilise:
length(unique(df$factorcolumn))