r - 从计数创建和矩阵

标签 r loops matrix sum

我有一个突变计数矩阵,比如“计数”。该矩阵具有列名称 V1、V2、...、Vi、...Vn,其中并非每个“i”都存在。这样就可以跳了,比如V1、V2、V5说的。此外,大多数列中都有 0。

我需要创建一个总和矩阵,称为“答案”,其中元素 i, j 是 i 和 j 处的数字计数的总和。在 i, i 元素中,它仅显示 i 处的计数数。

这是一个快速的数据设置。我已经在名为“answer”的代码中设置了正确的维度矩阵。因此,我需要自动化的是我填写矩阵的最后几行。

counts <- matrix(data = c(0,2,0,5,0,6,0), nrow = 1, ncol = 7,    dimnames=list("",c("V1","V2","V3","V4","V5","V6","V7")))

answer <- matrix(data =0, nrow = 3, ncol = 3, dimnames = list(c("V2","V4","V6"),c("V2","V4","V6")))

answer[1,1] <- 2
answer[1,2] <- 7
answer[1,3] <- 8
answer[2,1] <- 7
answer[2,2] <- 5
answer[2,3] <- 11
answer[3,1] <- 8
answer[3,2] <- 11
answer[3,3] <- 6

我知道我可以用 2 个嵌套的 for 循环来做到这一点,但肯定有更好的方法吗?谢谢!

最佳答案

这可以通过正确使用 expand.grid 来完成。和 rowSums :

n = counts[, counts > 0]
answer = matrix(rowSums(expand.grid(n, n)), nrow=length(n), dimnames=list(names(n), names(n)))
diag(answer) = n

为了展示它是如何工作的,n最终会是:
V2 V4 V5 
 2  5  6 

expand.grid(n, n)将是:
  Var1 Var2
1    2    2
2    5    2
3    6    2
4    2    5
5    5    5
6    6    5
7    2    6
8    5    6
9    6    6

最后一行( diag )是必要的,否则对角线将是原始向量的两倍(添加 2+25+56+6 )。

关于r - 从计数创建和矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15318410/

相关文章:

r - mapply 的 MoreArgs 参数什么时候不能被 R 的向量回收规则替换?

javascript - 你如何在js中用on obj制作多个矩形?以及如何在不同的 x 和 y 轴上制作它们?

javascript - Shiny 的 renderDataTable |如何限制显示的文字大小

r - 仅为所有非零列绘制条形图

PHP 在多维数组中查找值

python - 迭代与Python中的列表对应的字典键值

r - 为什么 R 在计算非空矩阵的均值时返回 NA

r - 使用 R 查找包含最大值的行索引

java - 如何使用arraylist JAVA从矩阵中获取值

r - 基于 TRUE/FALSE 的子集列表