假设这是我的数据示例
nrow<-4
ncol<-5
m1 <- matrix(rbinom(nrow*ncol,1,.5),nrow,ncol)
m2 <- matrix(rbinom(nrow*ncol,1,.5),nrow,ncol)
m3 <- matrix(rbinom(nrow*ncol,1,.5),nrow,ncol)
Run Code Online (Sandbox Code Playgroud)
我需要依次比较 3 个矩阵。根据这个原则。例如
米1
[,1] [,2] [,3] [,4] [,5]
[1,] 1 0 1 0 1
[2,] 1 1 1 0 1
[3,] 1 0 0 1 1
[4,] 0 0 0 1 0
Run Code Online (Sandbox Code Playgroud)
平方米
[,1] [,2] [,3] [,4] [,5]
[1,] 1 0 0 0 1
[2,] 0 1 1 0 0
[3,] 1 0 0 0 0
[4,] 0 1 0 1 0
Run Code Online (Sandbox Code Playgroud)
。现在计算矩阵每列中的匹配数。取两个矩阵的第一列
m1 m2
1 1 matched values
1 0 values did not match
1 1 matched values
0 0 matched values
Run Code Online (Sandbox Code Playgroud)
总共,矩阵m1和的第一列中的 4 个值中有m23 个一致。事实证明,75% 的值是一致的。
然后取第二列
m1 m2
[,2] [,2]
0 0 matched values
1 1 matched values
0 0 values did not match
0 1 values did not match
Run Code Online (Sandbox Code Playgroud)
这里还有一个类似的情况,其中 3 个值重合
换句话说,作为所需的输出,必须有类似的东西
[,1] [,2] [,3] [,4] [,5]
[1,] 1 0 1 0 1
[2,] 1 1 1 0 1
[3,] 1 0 0 1 1
[4,] 0 0 0 1 0
[,1] [,2] [,3] [,4] [,5]
[1,] 1 0 0 0 1
[2,] 0 1 1 0 0
[3,] 1 0 0 0 0
[4,] 0 1 0 1 0
75 75 75 75 50
Run Code Online (Sandbox Code Playgroud)
现在让我们计算收到的百分比的平均值。= 70%
(75+75+75+75+50)/5=70
Run Code Online (Sandbox Code Playgroud)
计算所有矩阵之间的百分比差异的最简单方法是什么?首先在m1和 之间m2,然后在m1和 之间m3,最后在m2和 之间m3
感谢您的帮助
这是两个基本 R 选项
combn+meancombn生成组合对,并mean给出共现的平均值。
combn(
lst,
2,
\(x) mean(do.call(`==`,x))
)
Run Code Online (Sandbox Code Playgroud)
你将获得
[1] 0.5 0.4 0.5
Run Code Online (Sandbox Code Playgroud)
adist+toString这种方法生成一个描述共现的矩阵。
> 1 - adist(unlist(lapply(lst, toString))) / lengths(lst)
[,1] [,2] [,3]
[1,] 1.0 0.5 0.4
[2,] 0.5 1.0 0.5
[3,] 0.4 0.5 1.0
Run Code Online (Sandbox Code Playgroud)
set.seed(0)
nrow <- 4
ncol <- 5
m1 <- matrix(rbinom(nrow * ncol, 1, .5), nrow, ncol)
m2 <- matrix(rbinom(nrow * ncol, 1, .5), nrow, ncol)
m3 <- matrix(rbinom(nrow * ncol, 1, .5), nrow, ncol)
lst <- list(m1, m2, m3)
Run Code Online (Sandbox Code Playgroud)