R:生成稀疏矩阵,所有元素都作为行和列

时间:2018-04-03 15:23:59

标签: r sparse-matrix

我有一个用户到用户的数据集。它没有像col和row那样拥有所有用户。例如,

 U1      U2     T
  1      3      1
  1      6      1
  2      4      1
  3      5      1

u1和u2代表数据集的用户。当我使用以下代码创建稀疏矩阵时,(df-将上述数据集的所有数据保存为数据帧)

trustmatrix <- xtabs(T~U1+U2,df,sparse = TRUE)  

   3  4  5  6
1  1  0  0  1
2  0  1  0  0
3  0  0  1  0

因为此矩阵没有行和列中的所有用户,如下所示。

   1  2  3  4  5  6
1  0  0  1  0  0  1
2  0  0  0  1  0  0
3  0  0  0  0  1  0
4  0  0  0  0  0  0 
5  0  0  0  0  0  0
6  0  0  0  0  0  0

如果我想在稀疏矩阵之后得到上面的矩阵,我怎么能在R?

中这样做

1 个答案:

答案 0 :(得分:1)

我们可以使用factor将列转换为levels作为1到6,然后使用xtabs

df1[1:2] <- lapply(df1[1:2], factor, levels = 1:6)
as.matrix(xtabs(T~U1+U2,df1,sparse = TRUE))
#   U2
#U1  1 2 3 4 5 6
#  1 0 0 1 0 0 1
#  2 0 0 0 1 0 0
#  3 0 0 0 0 1 0
#  4 0 0 0 0 0 0
#  5 0 0 0 0 0 0
#  6 0 0 0 0 0 0

或者另一种选择是将扩展索引填充为0,然后使用sparseMatrix

library(tidyverse)
library(Matrix)
df2 <- crossing(U1 = 1:6, U2 = 1:6) %>% 
          left_join(df1) %>% 
          mutate(T = replace(T, is.na(T), 0))
sparseMatrix(i = df2$U1, j = df2$U2, x = df2$T)

或使用spread

spread(df2, U2, T)