'Report frequency for multiple variables in a dataframe in R

I have a dataframe with data from a survey. I would like to produce a report in table format with the frequencies of each variable.

So working with the dataset mtcars, having this:

> count(mtcars, cyl)
  cyl  n
1   4 11
2   6  7
3   8 14
> count(mtcars, gear)
  gear  n
1    3 15
2    4 12
3    5  5

I would like to produce a table like this (or something similar):

variable n
cyl
4 11
6 7
8 14
gear
3 15
4 12
5 5

Any idea as to how this may be achievable?



Solution 1:[1]

The below gets us the output in slightly different format. However, it does allow for subset (using column variable which OP's requirement does not.)

library(data.table)

df <- setDT(copy(mtcars))

# select columns as grouping by continuous variables is not appropriate
x <- c('cyl', 'gear')

y <- lapply(x, \(i) df[, .N, i])

names(y) <- x

y <- rbindlist(y, idcol=T, use.names=F)

names(y) <- c('variable', 'class', 'count')

   variable class count
1:      cyl     6     7
2:      cyl     4    11
3:      cyl     8    14
4:     gear     4    12
5:     gear     3    15
6:     gear     5     5

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1