我的矩阵如下表
Factor V1 V2 V3 Freq Percentage
M 1 0 1 2 16.66666667
P 1 1 2 4 33.33333333
Z 2 3 1 6 50
我想计算每一列的频率,然后计算整个数据的频率。理想的结果是:
sapply(df, table)
我尝试了tidyverse
,但没有成功。任何帮助都将非常有用,尤其是使用errorMessage": "/var/task/node_modules/ibm_db/build/Release/odbc_bindings.node: invalid ELF header",
答案 0 :(得分:0)
这是git reset
和table
的一种方式
addmargins
或者以更紧凑的方式
out <- addmargins(table(unlist(df1), c(col(df1))), 2)
cbind(out, Percentage = 100 *out[,4]/sum(out[, 4]))
# 1 2 3 Sum Percentage
#M 1 0 1 2 16.66667
#P 1 1 2 4 33.33333
#Z 2 3 1 6 50.00000
或使用library(qdapTools)
transform(as.data.frame(addmargins(t(mtabulate(df1)), 2)),
Percentage = 100 * Sum/sum(Sum))
tidyverse
library(tidyverse)
gather(df1, key, Factor) %>%
dplyr::count(key, Factor) %>%
spread(key, n, fill = 0) %>%
mutate(Freq = rowSums(.[-1]),
Percentage = 100 * Freq/sum(Freq))
# A tibble: 3 x 6
# Factor v1 v2 v3 Freq Percentage
# <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
#1 M 1 0 1 2 16.7
#2 P 1 1 2 4 33.3
#3 Z 2 3 1 6 50