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

R语言滑动窗口引文网络构建及多网络中心性统计高效实现问询

高效实现方案

核心思路:放弃在全局环境生成22个独立对象的做法,改用列表批量处理中间结果,最后一次性合并所有统计值,既减少冗余代码也降低内存占用。

前置依赖

需要用到tidyverse做批量数据处理、igraph做网络分析,提前加载包:

library(tidyverse)
library(igraph)

实现代码

步骤1:构造滑动窗口映射表

先把22个窗口的编号和对应起止年份整理成映射表,方便后续批量调用:

window_map <- tibble(
  window = 1:22,
  start_y = 1995:2016,
  end_y = start_y + 4
)

步骤2:批量计算所有窗口的中心性并合并结果

直接用purrr::pmap_dfr遍历每个窗口,计算完成后自动按行拼接为最终数据框,不需要单独存储22个网络对象:

final_centrality <- pmap_dfr(window_map, function(window, start_y, end_y) {
  # 过滤当前窗口的引文数据,聚合边权重
  edge_data <- citations %>%
    filter(year >= start_y, year <= end_y) %>%
    rename(from = author_1, to = author_2) %>%
    group_by(from, to) %>%
    summarise(weight = sum(collaborations), .groups = "drop")
  
  # 构建加权网络,引文网络默认有向,按需调整directed参数
  g <- graph_from_data_frame(edge_data, directed = TRUE)
  
  # 计算三类中心性,参数可按需调整
  tibble(
    window = window,
    node = V(g)$name,
    degree = degree(g, weights = E(g)$weight),
    betweenness = betweenness(g, weights = E(g)$weight),
    closeness = closeness(g, weights = E(g)$weight)
  )
})

可选优化(数据量较大时使用)

如果原始数据量很大,可以用data.table替换dplyr的过滤聚合逻辑,速度提升明显:

library(data.table)
setDT(citations) # 提前把数据转成data.table格式

# 把上面的edge_data生成逻辑替换为以下代码
edge_data <- citations[year >= start_y & year <= end_y, 
                       .(weight = sum(collaborations)), 
                       by = .(from = author_1, to = author_2)]

注意事项

  • 原示例代码中存在列名笔误,数据中的作者列名为author_1、author_2,需要和实际数据字段保持一致
  • 中心性计算的归一化设置、加权逻辑可以根据研究需求调整对应函数的参数
  • 如果需要无向网络,修改graph_from_data_frame的directed参数为FALSE即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 08:48:03