计算每列的频率并计算整个矩阵的频率

时间:2019-05-07 19:39:40

标签: r tidyverse frequency

我的矩阵如下表

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",

1 个答案:

答案 0 :(得分:0)

这是git resettable的一种方式

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