我有一个用户到用户的数据集。它没有像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?
中这样做答案 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)