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