首页 > 解决方案 > 如何使用循环命令计算R中矩阵的两对不同行的每一行和每一列中某些固定值的频率

问题描述

我有一个矩阵,

A=matrix(c(0,1,2,1,2,0,2,0,1),3,3). N= 3行和n=3行。

我有一些固定值。

Ro= 每行出现 1 的次数。

R1= n-Ro是每一行的剩余值。

R11=(1,1)

我想检查这对出现在两行的不​​同列中的次数。Ro1=(0,1), (1,0), (1,2), (2,1)我想检查这些固定值在两行的不​​同列中出现了多少次。我想对其他固定值Roo=(0,0), (2,2)Ro2=(0,2), (2,0).

我在以下链接中上传了图片和说明。

如何计算每行中某些固定值的频率

两行不同列中的一些固定值

如何在R中计算这个表达式

标签: r

解决方案


这可能接近您想要的:

A <- matrix(c(0, 1, 2, 1, 2, 0, 2, 0, 1), 3, 3)
Ro <- rowSums(A == 1)
R1 <- ncol(A) - Ro

这是你问题的第一部分。现在以成对的行匹配模式。

pairs <- as.matrix(expand.grid(Row1=1:3, Row2=1:3))
pairs <- t(pairs[pairs[, 1] < pairs[, 2], ])
pairs
#      [,1] [,2] [,3]
# Row1    1    1    2
# Row2    2    3    3

pairs矩阵给出了我们将在其中搜索匹配项的行,第 1 行有 2,第 1 行有 3,第 2 行有 3。

freqcount <- function(A, pairs, pattern) {
     sum(sapply(seq(dim(pairs)[2]), function(i) sum(apply(A[pairs[, i], ], 2,
           function(x) all(x==pattern)))))
}

freqcount()函数将采用一个 matrix A、一个pairsmatrix 和一个pattern必须是 2x1 矩阵的 a ,例如rbind(1, 1)。现在我们需要创建一组模式并在矩阵中搜索它们:

Patts <- t(expand.grid(Row2=0:2, Row1=0:2))[2:1, ]
Freqs <- apply(Patts, 2, function(x) freqcount(A, pairs, pattern=x))
Results <- rbind(Patts, Freqs)
Results
#       [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
# Row1     0    0    0    1    1    1    2    2    2
# Row2     0    1    2    0    1    2    0    1    2
# Freqs    0    2    1    1    0    2    2    1    0

所以 (0, 0) 模式出现 0 次, (0, 1) 模式出现 2 次, (0, 2) 模式出现 1 次,等等。


推荐阅读