r - 如何使用循环命令计算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)
.
我在以下链接中上传了图片和说明。
解决方案
这可能接近您想要的:
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
、一个pairs
matrix 和一个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 次,等等。
推荐阅读
- ios - iOS - 多播网络失败:“无法分配请求的地址”
- azure - 串行执行 ansible playbook 以升级到 azure vmss 的最新模型
- java - Spring:如何为所选端点设置网络连接超时?
- node.js - 重建一个 vuejs (nodejs) 模块
- python - XLWings 格式刷
- git - 更改 GIT LFS 存储目录路径
- c++ - 如何调用模板数组运算符重载函数?
- django - Django 管理员组权限和访问
- android - Google Play 控制台中的 VALIDATE_APP_MESSAGE_TOO_MANY_LISTS_IN_TRACK 错误
- python - Python:使用 pyfolio 中的 plot_drawdown_underwater 和 pandas-datareader 中的 get_data_yahoo 来绘制股票回撤时出现问题