r - 在 R 中计算频率或百分比矩阵

标签 r

如果我有以下内容:

mm <- matrix(0, 4, 3)
mm<-apply(mm, c(1, 2), function(x) sample(c(0, 1), 1))

> mm
     [,1] [,2] [,3]
[1,]    1    1    1
[2,]    1    1    0
[3,]    0    0    0
[4,]    1    0    1

如何输出一个矩阵来表示不同列的频率或百分比,其中两个值都 = 1。例如 - 4 行中有两行,其中第 1 列和第 2 列都等于 1 (=0.5) 和 1 行共 4 个,其中第 2 列和第 3 列 = 1 (=0.25),所以在这种情况下我需要:

     [,1]      [,2]      [,3]
[1,]    1      0.5       0.5
[2,]    0.5    1         0.25
[3,]    0.5    0.25      1

我对比较相同的列不感兴趣,因此默认情况下对角线保持为 1。

我想我可能会在 cor(mm) 中找到一种方法来输出同频率或同百分比而不是相关系数,但事实似乎并非如此。但最终输出的维度应该是一个 N × N 列矩阵,如 cor() 输出:

> cor(mm)
          [,1]      [,2]      [,3]
[1,] 1.0000000 0.5773503 0.5773503
[2,] 0.5773503 1.0000000 0.0000000
[3,] 0.5773503 0.0000000 1.0000000

但显然这些是相关系数,我只想用同频率或同百分比来代替。

最佳答案

基础 R 解决方案使用 crossprod,即

r <- `diag<-`(crossprod(mm)/nrow(mm),1)

这样

> r
     [,1] [,2] [,3]
[1,]  1.0 0.50 0.50
[2,]  0.5 1.00 0.25
[3,]  0.5 0.25 1.00

数据

mm <- structure(c(1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1), .Dim = 4:3)

关于r - 在 R 中计算频率或百分比矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60525025/

相关文章:

r - 使用 data.table 在 setkeyv 中出现异常错误

java - Rhadoop 单机基本任务

R 中的排名函数仅返回排名 1

java - 如何使用 Java 将 JSONArray 转换为 R 数据框?

r - 如何在 R 中按一个变量对数据帧进行排序,同时对其他变量进行分组

r - Shiny R 上的工具提示?

r - 如何避免矩阵计算中的双for循环

r - sparkR中collect和as.data.frame的区别

r - 如何使用 R 在一个面板中绘制贝叶斯先验分布和后验分布?

r - group_by 总计汇总值