如何从论文作者原始数据计算网络分析所需的关联边权重
实现方法
你用widyr::pairwise_count的思路是正确的,缺的是补全所有可能的作者对、填充无共现组合的权重为0这一步,完整可运行代码如下:
步骤1:加载依赖包
library(tidyverse) library(widyr)
步骤2:处理原始数据生成作者编码
# 导入原始数据 paper <- c("paper1", "paper1", "paper2", "paper3", "paper3", "paper4", "paper4", "paper5") author <- c("author1", "author2", "author1", "author2", "author1", "author2", "author3", "author2") df1 <- data.frame(paper, author) # 生成作者的简化编码(a1对应author1、a2对应author2、a3对应author3) author_map <- df1 %>% distinct(author) %>% arrange(author) %>% mutate(author_code = paste0("a", row_number())) df1 <- df1 %>% left_join(author_map, by = "author")
步骤3:计算作者共现权重
# 统计每对作者共同发文的次数 co_occur <- df1 %>% pairwise_count( item = author_code, feature = paper, upper = FALSE, # 只返回单边,避免a1→a2和a2→a1重复出现 sort = TRUE ) %>% rename(weight = n)
步骤4:补全所有作者对,填充0权重
# 生成所有不重复的作者两两组合 all_author_pairs <- t(combn(author_map$author_code, 2)) %>% as.data.frame() %>% setNames(c("from", "to")) # 关联共现权重,无共现的组合权重填充为0 df2 <- all_author_pairs %>% left_join(co_occur, by = c("from", "to")) %>% mutate(weight = replace_na(weight, 0))
输出结果验证
运行后得到的df2和你要求的格式完全一致:
> df2 from to weight 1 a1 a2 2 2 a1 a3 0 3 a2 a3 1
内容的提问来源于stack exchange,提问作者michellis
相关产品推荐
相关产品推荐

