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

基于交互频次将DataFrame转换为矩阵的问题求助

解决方法

你的问题出在table()函数的输入上——你没有用原始数据中的GIVER和RECIPIENT列来统计交互频次,反而用了所有个体的笛卡尔积列表,自然无法得到真实的交互次数。

以下是修正后的函数,同时保留你需要的「包含所有个体」的矩阵要求:

my_matrix = function(df){
  # 获取所有唯一的个体,排序后作为行/列名
  all_individuals <- sort(unique(c(df$GIVER, df$RECIPIENT)))
  # 统计原始数据中 giver -> recipient 的实际交互频次
  interaction_counts <- table(df$GIVER, df$RECIPIENT)
  # 创建全0矩阵,维度匹配所有个体
  matrixi <- matrix(0, nrow = length(all_individuals), ncol = length(all_individuals),
                    dimnames = list(all_individuals, all_individuals))
  # 将统计到的频次填充到矩阵对应位置
  matrixi[rownames(interaction_counts), colnames(interaction_counts)] <- interaction_counts
  # 转换为数据框返回
  as.data.frame(matrixi)
}

代码解释

  1. 获取所有个体:用c(df$GIVER, df$RECIPIENT)合并两列后去重排序,确保矩阵包含所有出现过的个体。
  2. 统计真实交互频次:直接对原始的GIVER和RECIPIENT列做table(),得到的是实际的 giver→recipient 交互次数。
  3. 填充矩阵:把统计到的频次对应填入全0矩阵的位置,未出现的交互对保持0值。

用你提供的示例数据测试,会得到正确的结果:

A B C D E
A 0 1 1 0 0
B 0 0 0 1 0
C 0 0 0 0 1
D 1 0 0 0 0
E 0 1 0 0 0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 22:55:25