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
相关产品推荐
相关产品推荐

