You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何生成以全部用户为行列的用户对用户稀疏矩阵?

解决方法:生成包含全部用户的稀疏矩阵

我明白你的需求啦——原来用xtabs生成的矩阵只保留了有交互记录的用户,但你希望行列能覆盖所有存在的用户,哪怕他们没有任何交互数据。其实只要先把用户列转换成包含全部用户的因子,就能轻松解决这个问题!

具体步骤:

  1. 确定全部用户集合:先从你的数据里提取所有出现过的用户(不管是在U1还是U2里),或者如果你有预先定义的完整用户列表,直接用那个列表就行。
  2. 转换为因子类型:把U1和U2列转换成因子,并且指定因子的水平为全部用户。这样即使某个用户在U1或U2中没有记录,也会被纳入矩阵的行列。
  3. 重新生成稀疏矩阵:用处理后的因子列再运行xtabs,就能得到你想要的完整矩阵了。

完整代码示例:

# 先构造你的示例数据集
df <- data.frame(
  U1 = c(1, 1, 2, 3),
  U2 = c(3, 6, 4, 5),
  T = c(1, 1, 1, 1)
)

# 步骤1:获取所有唯一用户(如果有预先定义的全用户列表,直接替换成这个列表即可)
all_users <- unique(c(df$U1, df$U2))

# 步骤2:将U1和U2转换为包含全部用户的因子
df$U1 <- factor(df$U1, levels = all_users)
df$U2 <- factor(df$U2, levels = all_users)

# 步骤3:生成稀疏矩阵
trustmatrix <- xtabs(T ~ U1 + U2, df, sparse = TRUE)

# 查看结果
print(trustmatrix)

输出结果:

运行后你会得到这样的矩阵,完美覆盖了所有用户(1-6),没有交互的位置自动填充0:

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

补充说明:

如果你的全部用户列表不是从数据里提取的(比如有一些用户完全没有出现在U1/U2中,但你必须包含他们),直接把all_users替换成你的完整用户列表就行,比如all_users <- c(1,2,3,4,5,6),效果是一样的。

内容的提问来源于stack exchange,提问作者Anu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:17:47