我有一个现有的协方差矩阵,我想根据各个列所属的组(例如,前2行/列是组1,接下来是组2等)将其转换为块对角矩阵。是否有简单的方法可以做到这一点:
下面是我的一个例子:
m1 <- matrix(1:16, ncol=4, byrow=TRUE)
rownames(m1) <- colnames(m1 ) <- c('a', 'b', 'c', 'd')
a b c d
a 1 2 3 4
b 5 6 7 8
c 9 10 11 12
d 13 14 15 16
我有2个组:
第1组:“a”、“B”
第2组:“c”、“d”
以及我想要的
a b c d
a 1 2 0 0
b 5 6 0 0
c 0 0 11 12
d 0 0 15 16
5条答案
按热度按时间nimxete21#
使用
for
循环。0vvn1miw2#
我们可以使用
which
函数进行逻辑索引:对于which
,我们使用逻辑索引将每个组之外的元素设置为0,因此不需要循环,这在大型矩阵中可能更有效。ruyhziif3#
这里有一个办法。
创建于2023年3月17日,使用reprex v2.0.2
lawou6xi4#
您可以将
linpk
包与blockdiag
函数结合使用,其中使用所需组的两个子集,如下所示:创建于2023年3月17日,使用reprex v2.0.2
cczfrluj5#
我们可以使用
tcrossprod
+table
+stack
来创建掩码矩阵,例如,使得
其中