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

如何从论文作者原始数据计算网络分析所需的关联边权重

实现方法

你用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 11:30:01