在R中填充矩阵的有效方法?

机器算法验证 r 矩阵
2022-03-29 00:05:05

给定一个包含三列的表,

1 2 0.05
1 3 0.04
2 3 0.001

和一个具有定义维度的矩阵,

mat <- matrix(NA, nrow = 3, ncol = 3)

    [,1] [,2] [,3]
[1,]   NA   NA   NA
[2,]   NA   NA   NA
[3,]   NA   NA   NA

有没有一种有效的方法可以用 R 表的第三列中的条目填充矩阵,而不必遍历表、隔离索引并在 for 循环中插入值?

谢谢。

2个回答

通常,表作为矩阵或数组处理,矩阵索引允许将两个列参数作为 (i,j) 索引(如果被索引的对象具有更高的维度,则使用具有更多列的矩阵),因此:

> inp.mtx <- as.matrix(inp)
> mat[inp.mtx[,1:2] ]<- inp.mtx[,3]
> mat
     [,1] [,2]  [,3]
[1,]   NA 0.05 0.040
[2,]   NA   NA 0.001
[3,]   NA   NA    NA
 mat <- matrix(c(1, 1, 2, 2, 3, 3, 0.05, 0.04, 0.001), nrow = 3, ncol = 3)
 mat

 mat1 <- matrix(c(rep(NA,6), 0.05, 0.04, 0.001), nrow = 3, ncol = 3)
 mat1

 mat2 <- matrix(NA, nrow = 3, ncol = 3)
 mat2
 mat2[,3] <- c(0.05, 0.04, 0.001)
 mat2



 df <- data.frame(x=c(1, 1, 2), y=c(2, 3, 3), z=c(0.05, 0.04, 0.001))
 df

 mat3 <- matrix(NA, nrow = 3, ncol =3)
 mat3
 mat3[,3] <- df$z
 mat3

 mat4 <- matrix(NA, nrow = 3, ncol =3)
 mat4
 mat4[,3] <- unlist(df[3])
 mat4