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.

22
demandé sur zx8754 2014-09-30 10:53:21

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.

32
répondu Paul Hiemstra 2014-09-30 07:13:45

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 
27
répondu agstudy 2014-09-30 07:02:33

en utilisant plyr paquet:

library(plyr)

count(mydf$V1)

il vous retournera une fréquence de chaque valeur.

19
répondu Andriy T. 2018-01-04 08:10:49

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())
13
répondu akrun 2014-09-30 10:50:25

nous pouvons utiliser summary sur la colonne des facteurs:

summary(myDF$factorColumn)
2
répondu Spariant 2018-01-04 08:29:34

encore Une approche consisterait à appliquer n() fonction qui compte le nombre d'observations

library(dplyr)
library(magrittr)
data %>% 
  group_by(columnName) %>%
  summarise(Count = n())
2
répondu iamigham 2018-05-19 08:52:15

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)
1
répondu Christian Savemark 2018-05-10 18:26:32