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

R语言中按数据框条件累加更新矩阵值的实现方法

实现方案

核心思路

  • 你初始化的空白矩阵默认填充NA,直接做累加运算会返回NA结果,第一步需要先将矩阵所有值替换为0,同时给行列绑定主题名方便索引匹配
  • 分别遍历两个判定列,每列中筛选出取值为1(统计显著)的主题集合
  • 对每个显著主题集合,生成所有两两配对的主题组合,每个组合对应矩阵的两个对称位置,直接累加1即可,不需要重复计算
  • 封装为通用函数后,只需要逐次传入新的数据框和当前计数矩阵,就能实现跨数据框的累计统计,不会覆盖历史计数

完整代码

# 1. 修正初始化矩阵:替换原空值矩阵为全0矩阵,绑定主题名作为行列名
mymatrix <- matrix(0, nrow = 50, ncol = 50)
topic_names <- paste0("Topic", 1:50)
rownames(mymatrix) <- topic_names
colnames(mymatrix) <- topic_names

# 2. 封装共显著计数函数,支持多数据框累计调用
count_co_significance <- function(df, mat) {
  # 定义需要统计的两个判定列
  judge_columns <- c("judgement.yNTA", "judgement.yYTA")
  
  for (col in judge_columns) {
    # 提取当前列下统计显著的主题
    sig_topics <- df$response[df[[col]] == 1]
    # 显著主题不足2个时无共现关系,直接跳过
    if (length(sig_topics) < 2) next
    
    # 生成所有两两主题的不重复组合
    topic_combinations <- combn(sig_topics, 2)
    
    # 遍历组合给对称位置累加计数
    for (pair_idx in seq_len(ncol(topic_combinations))) {
      t1 <- topic_combinations[1, pair_idx]
      t2 <- topic_combinations[2, pair_idx]
      mat[t1, t2] <- mat[t1, t2] + 1
      mat[t2, t1] <- mat[t1, t2]
    }
  }
  return(mat)
}

# 3. 单数据框测试(使用你提供的示例df)
mymatrix <- count_co_significance(df, mymatrix)

# 4. 多数据框累计时重复调用即可,示例:
# mymatrix <- count_co_significance(df2, mymatrix)
# mymatrix <- count_co_significance(df3, mymatrix)

结果说明

  • 示例数据中judgement.yNTA列仅Topic46为显著,无共现对,不会产生计数;judgement.yYTA列共5个显著主题(Topic18、Topic25、Topic31、Topic40、Topic44),两两组合共10对,对应矩阵位置计数均为1
  • 矩阵对角线默认保持0,若需要统计单个主题自身的显著累计次数,可单独遍历每列给对角线位置累加。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 23:54:17