Search code examples
rcountfrequency

How to count how many values per level in a given factor?


I have a data.frame mydf with about 2500 rows. These rows correspond to 69 classes of objects in colum 1 mydf$V1, and I want to count how many rows per object class I have. I can get a factor of these classes with:

objectclasses = unique(factor(mydf$V1, exclude="1"));

What's the terse R way to count the rows per object class? If this were any other language I'd be traversing an array with a loop and keeping count but I'm new to R programming and am trying to take advantage of R's vectorised operations.


Solution

  • Or using the dplyr library:

    library(dplyr)
    set.seed(1)
    dat <- data.frame(ID = sample(letters,100,rep=TRUE))
    dat %>% 
      group_by(ID) %>%
      summarise(no_rows = length(ID))
    

    Note the use of %>%, which is similar to the use of pipes in bash. Effectively, the code above pipes dat into group_by, and the result of that operation is piped into summarise.

    The result is:

    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
    

    See the dplyr introduction for some more context, and the documentation for details regarding the individual functions.