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 x 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)
推荐阅读
- discord.js - 如何通过用户对象检索公会的所有成员?
- c# - C# ConcurrentBag - 如何安全地清除每 N 个添加的对象
- mysql - 列出分配到“东伦敦十字路口”项目的所有已婚员工及其配偶的姓名
- jquery - jquery函数在偶尔完成之前退出
- android - 升级奥利奥后如何在三星触发前置闪光灯
- javascript - 如何将带有对象的数组从提供者传递到页面?
- vue.js - 在创建的数据 api 完成加载之前运行的挂载钩子
- c# - 使用 INotifyPropertyChanged 与类似 WinForms 的事件处理程序有什么优势?
- php - 我的 PHP 脚本不断抛出“内存不足”
- pandas - 使用替代方法对分组进行排序时保持顺序?