首页 > 解决方案 > 如何使用向量元素作为r中矩阵位置的坐标?

问题描述

我想使用严格由两位数字组成的向量元素作为到特定矩阵位置的映射。例如,考虑以下情况:

mat1 <- rbind(c(12,31,22,13),c(3,1,5,7))
mat <- matrix(rep( 0, len=25), nrow = 5)

我想做的是mat1[1,1]用来访问 1 2 的mat位置,并且在那个位置,我希望存储 3 的相应值。我尝试将mat1's元素转换为字符串,拆分它们,存储它们,调用存储它们as.numeric()的向量上的函数,最后运行一个循环,虽然我最终让它工作,但我现在有接近一百万个循环在我的程序中。我会很感激任何想法!

标签: r

解决方案


我们可以strsplit将'mat'的第一行转换为行/列索引,并使用它来分配'mat'的相应元素和'mat1'的第二行

i1 <- do.call(rbind, lapply(strsplit(as.character(mat1[1,]),""), as.numeric))
mat[i1] <- mat1[2,]
mat
#     [,1] [,2] [,3] [,4] [,5]
#[1,]    0    3    7    0    0
#[2,]    0    5    0    0    0
#[3,]    1    0    0    0    0
#[4,]    0    0    0    0    0
#[5,]    0    0    0    0    0

或与substr

m1 <- mat1[1,]
i1 <- cbind(as.integer(substr(m1, 1, 1)), as.integer(substr(m1, 2, 2)))
mat[i1] <- mat1[2,]

推荐阅读