r - 在 R 中填充矩阵

标签 r matrix fill

我在 R 中有一个预先分配的矩阵,需要用从具有以下格式的文件生成的数据帧中的数据填充它:

1-1-7  
1-3-2  
2-2-6  
1-4-8  
....

其中第一列包含行索引,第二列包含列索引,第三列包含值。

有没有比以下循环更快/更好的方法?
    for(i in 1:nrow(file)){  
    matrix[file[i,1],file[i,2]]=file[i,3]
    }

最佳答案

使用 row/col索引作为 file 的第一列和第二列并分配 file[,3]m1使用这些索引。

m1[as.matrix(file[1:2])] <- file[,3]
m1
#     [,1] [,2] [,3] [,4]
#[1,]    7    0    2    8
#[2,]    0    6    0    0

正如我上面提到的,我们根据行/列索引分配值。如果我们取前两列并转换为矩阵,则第一列作为行索引,第二列作为列索引
 as.matrix(file[1:2])
 #     v1 v2
 #[1,]  1  1
 #[2,]  1  3
 #[3,]  2  2
 #[4,]  1  4

如果我们子集 m1基于第一行,即 1 1 ,我们得到了 m1 的元素在 row=1 和 column=1 处,类似地对于第二行,它将是 row=1 和 column=3 处的元素,依此类推。在这里,我们创建了一个矩阵 0具有指定的尺寸。因此,基于行/列位置的 4 个值将是 0
m1[as.matrix(file[1:2])]
#[1] 0 0 0 0

现在,我们通过将值分配给"file"的第 3 列来更改/替换“m1”中指定行/列位置的值
 m1[as.matrix(file[1:2])] <- file[,3]

如果我们检查指定位置的值,它将被替换
 m1[as.matrix(file[1:2])] 
 #[1] 7 2 6 8

或者我们可以使用另一种方法使用 sparseMatrix来自 library(Matrix)
library(Matrix)
sM <- sparseMatrix(file[,1], file[,2], x=file[,3])
as.matrix(sM)
#      [,1] [,2] [,3] [,4]
#[1,]    7    0    2    8
#[2,]    0    6    0    0

数据
file <- structure(list(v1 = c(1L, 1L, 2L, 1L), v2 = c(1L, 3L, 2L, 4L), 
v3 = c(7, 2, 6, 8)), .Names = c("v1", "v2", "v3"), 
 class = "data.frame", row.names = c(NA, -4L))

m1 <- matrix(0, nrow=max(file[,1]), ncol=max(file[,2]))

关于r - 在 R 中填充矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31099477/

相关文章:

python - 从 python 制作矩阵格式

ios - 如何准确放大捏合手势的特定点(多次捏合)?

r - 在 R 中使用 GGplot 填充 map 的多边形

r - 使用 dplyr 进行函数式编程

r - 如何测试三个变量是否相等 [R]

R矩阵获取行列数和实际值

Python,如何在多条(4)条曲线之间进行填充?

r - 根据因子值填充时间序列下的区域

r - 如何在R中生成具有一定等级的矩阵

r - 使用了哪个 plot()?