为R中的每个变量生成并存储频率表

时间:2018-08-18 21:00:55

标签: r

我有以下数据集:

set.seed(6)
df <- data.frame(a=floor(runif(100)*5),b=floor(runif(100)*4),c=floor(runif(100)*3))

我想为每个变量生成摘要频率表,并将其存储在一个数据集中。例如。

outexample <- rbind(table(df$a),c(table(df$b),0),c(table(df$c),0,0))
rownames(outexample) <- letters[1:3]
outexample

   0  1  2  3  4
a 19 18 20 18 25
b 30 23 19 28  0
c 28 33 39  0  0

有数百个变量,每个变量中的类数量未知。有更体面的方法吗?

3 个答案:

答案 0 :(得分:5)

您可以使用stack()table()-和t()来获得所需的输出。

t(table(stack(df)))
#   values
#ind  0  1  2  3  4
#  a 19 18 20 18 25
#  b 30 23 19 28  0
#  c 28 33 39  0  0

使用data.table,您可以做到

library(data.table)
setDT(df)
dcast(data = melt(df), variable ~ value)

答案 1 :(得分:2)

这会使它变长,然后计数,然后再次加宽

library(magrittr)
df %>% 
  tidyr::gather(variable, score) %>% 
  dplyr::count(variable, score) %>% 
  tidyr::spread(score, n, fill=0)

结果

# A tibble: 3 x 6
  variable   `0`   `1`   `2`   `3`   `4`
  <chr>    <dbl> <dbl> <dbl> <dbl> <dbl>
1 a           19    18    20    18    25
2 b           30    23    19    28     0
3 c           28    33    39     0     0

答案 2 :(得分:1)

我们还可以unlist数据集并通过复制列名来应用table

table(rep(names(df), each = nrow(df)), unlist(df))

#     0  1  2  3  4    
#  a 19 18 20 18 25
#  b 30 23 19 28  0
#  c 28 33 39  0  0