Comment compter combien de valeurs par niveau dans un facteur donné?
j'ai une donnée.cadre mydf
avec environ 2500 lignes. Ces lignes correspondent à 69 classes d'objets dans la colonne 1 mydf$V1
, et je veux compter combien de lignes par classe d'objet j'ai.
Je peux obtenir un facteur de ces classes avec:
objectclasses = unique(factor(mydf$V1, exclude="1"));
comment compter les rangées par classe d'objet? Si c'était un autre langage, Je traverserais un tableau avec une boucle et je tiendrais le compte, mais je suis nouveau dans la programmation R et j'essaie de profiter de la vectorisation de R opérations.
7 réponses
Ou dplyr
bibliothèque:
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 en bash. Effectivement, le code au-dessus des pipes dat
en group_by
, et le résultat de cette opération est courante 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 le dplyr
introduction pour plus de contexte, et la documentation pour plus de détails concernant les différentes fonctions.
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
en utilisant plyr
paquet:
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 summary
sur la colonne des facteurs:
summary(myDF$factorColumn)
encore Une approche consisterait à appliquer n() fonction 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) dans votre base de données.
library(plyr)
lapply(df, count)