我有以下数据集:
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
有数百个变量,每个变量中的类数量未知。有更体面的方法吗?
答案 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