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

R: Generating sparse matrix with all elements as rows and columns

我有一个用户到用户的数据集。它没有将所有用户都作为 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 中实现?

我们可以将列转换为 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)