dplyr: apply function table() to each column of a data.frame

后端 未结 4 706
小鲜肉
小鲜肉 2021-02-18 15:42

Apply function table() to each column of a data.frame using dplyr

I often apply the table-function on each column of a data frame using plyr, like this:

4条回答
  •  失恋的感觉
    2021-02-18 15:55

    In general you probably would not want to run table() on every column of a data frame because at least one of the variables will be unique (an id field) and produce a very long output. However, you can use group_by() and tally() to obtain frequency tables in a dplyr chain. Or you can use count() which does the group_by() for you.

    > mtcars %>% 
        group_by(cyl) %>% 
        tally()
    > # mtcars %>% count(cyl)
    
    Source: local data frame [3 x 2]
    
      cyl  n
    1   4 11
    2   6  7
    3   8 14
    

    If you want to do a two-way frequency table, group by more than one variable.

    > mtcars %>% 
        group_by(gear, cyl) %>% 
        tally()
    > # mtcars %>% count(gear, cyl)
    

    You can use spread() of the tidyr package to turn that two-way output into the output one is used to receiving with table() when two variables are input.

提交回复
热议问题