我有一个现有的协方差矩阵,我想根据各个列所属的组(例如,前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

我有两个组:

第一组:‘a’、‘b’

第二组:‘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

推荐答案

您可以使用带有blockdiag函数的linpk程序包,其中使用所需组的两个子集,如下所示:

m1 <- matrix(1:16, ncol=4, byrow=TRUE)
rownames(m1) <- colnames(m1 ) <- c('a', 'b', 'c', 'd')
library(linpk)
blockdiag(m1[c("a", "b"), c("a", "b")], m1[c("c", "d"), c("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

创建于2023-03-17年第reprex v2.0.2

R相关问答推荐

R图中的字体大小和字体样式(带有R底图)

在R中,将一个函数作为输入传递给另一个函数时进行参数判断

R:如何自动化变量创建过程,其中我需要基于ifelse()为现有变量的每个级别创建一个单独的变量

查找满足SpatRaster中条件的单元格位置

然后根据不同的列值有条件地执行函数

我不能在docker中加载sf

二维样条,严格以一个参数递增

R函数‘paste`正在颠倒其参数的顺序

从R中的对数正态分布生成随机数的正确方法

为左表中的所有行使用值Fill滚动左连接

为什么在BASE R中绘制线条时会看到线上的点?

汇总数据帧中的复制列,保持行的唯一性

查找所有站点的最小值

R中Gamma回归模型均方误差的两种计算方法不一致

使用未知字符数(不受限制的最大长度)的Lookback有什么好的替代方案?

有没有办法通过str_Detect()或其他字符串匹配函数来连接两个长度不等的数据帧?

随机 Select 的非NA列的行均数

R中的Desolve:返回的导数数错误

如果满足条件,则替换列的前一个值和后续值

如何使用ggplot2根据绘图中生成的斜率对小平面进行排序?