R:将行/列索引的数据帧转换为矩阵

时间:2017-10-31 14:12:21

标签: r dataframe matrix

我想转换像这样的对象

df <- data.frame(ROW = c(1,3),COLUMN =c(2,3),VALUE = c(10,20))
df
ROW COLUMN VALUE 
1        2    10
3        3    20

到这样的矩阵

m <-matrix(c(0,10,0,0,0,0,0,0,20),ncol = 3,nrow = 3)
m
     [,1] [,2] [,3]
[1,]    0    0    0
[2,]   10    0    0
[3,]    0    0   20

我知道数据框代表稀疏矩阵,但我没有发现任何与我正在寻找的内容完全相关的问题。

3 个答案:

答案 0 :(得分:4)

我们可以使用sparseMatrix

library(Matrix)
as.matrix( sparseMatrix(i = df$COLUMN, j= df$ROW, x= df$VALUE))
#      [,1] [,2] [,3]
#[1,]    0    0    0
#[2,]   10    0    0
#[3,]    0    0   20

或创建{0}的matrix然后分配

m1 <- matrix(0, 3, 3)
m1[as.matrix(df[2:1])] <- df$VALUE

注意:根据输出,ROW/COLUMN索引似乎是颠倒的

答案 1 :(得分:1)

我们可以遍历master行并根据df中包含的行和列索引填充矩阵:

df

正如@akrun所说,似乎行和列索引都被翻转了。

答案 2 :(得分:0)

这是apply

的解决方案
mat <- matrix( 0, ncol = max(df$ROW), nrow = max(df$COLUMN) )
f <- function( x ) { mat[x[1],x[2]] <<- x[3] }
apply( df, 1, f } )

<<-运算符将值应用于外部定义的垫。 可能需要使用as.numeric等进行数据类型转换。