R:将COO格式矩阵转换为常规矩阵格式

时间:2014-12-05 19:31:03

标签: r matrix sparse-matrix

我有一个COO (Coordinate list)格式的方阵。

例如:

From  To   Value
1     1     1
1     2     1
2     1     0
2     2     1

我想将其转换为常规的R矩阵格式。 所以它看起来像这样:

      [,1] [,2]
[1,]   1    1
[2,]   0    1

请告知如何操作。

2 个答案:

答案 0 :(得分:0)

这是我发现的一种方式:

使用Matrix包。

首先,示例中的表格为:

> coo_mat <- rbind(c(1,1,1), c(1,2,1), c(2,1,0), c(2,2,1))
> coo_mat
     [,1] [,2] [,3]
[1,]    1    1    1
[2,]    1    2    1
[3,]    2    1    0
[4,]    2    2    1

现在,使其成为常规格式矩阵:

> as.matrix(Matrix::sparseMatrix(i=coo_mat[,1], j=coo_mat[,2], x=coo_mat[,3]))

     [,1] [,2]
[1,]    1    1
[2,]    0    1

答案 1 :(得分:0)

您可以使用基准R中的xtabs执行此操作,如下所示:

out <- xtabs(coo_mat[, 3] ~ coo_mat[, 1] + coo_mat[, 2])
out
#             coo_mat[, 2]
# coo_mat[, 1] 1 2
#            1 1 1
#            2 0 1

结果是类&#34; xtabs&#34;的对象。和&#34;表&#34;。

class(out)
# [1] "xtabs" "table"

如果您想摆脱dimnames和其他attributes,您可以执行以下操作:

`dim<-`(`attributes<-`(out, NULL), dim(out))
#      [,1] [,2]
# [1,]    1    1
# [2,]    0    1