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

使用rscopus获取多作者年度发文量数据框遇阻求助

解决方案:用rscopus批量统计多作者年度发文量

核心思路

要批量处理多个作者ID,必须遍历每个ID单独获取数据,再统一整理统计。之前只拿到第一位作者的数据,大概率是代码未循环处理所有ID,或结果未正确合并。

完整代码示例

假设你已有作者ID列表(如author_ids),以下是可直接运行的代码:

# 加载必要包
library(rscopus)
library(dplyr)
library(tidyr)

# 设置Scopus API密钥(替换为你的密钥)
set_api_key("YOUR_API_KEY")

# 你的作者ID列表(示例)
author_ids <- c("9-some-id-1", "9-some-id-2", "9-some-id-3")

# 定义函数:单个作者的年度发文量统计
get_author_yearly_pubs <- function(author_id) {
  # 获取作者的所有发文数据
  res <- scopus_author_search(author_id, verbose = FALSE)
  
  # 处理无结果的情况
  if (is.null(res$entries)) {
    return(tibble(author_id = author_id, year = NA, pub_count = 0))
  }
  
  # 提取发文年份并统计
  res$entries %>%
    mutate(year = as.integer(substr(coverDate, 1, 4))) %>% # 从coverDate提取年份
    group_by(author_id, year) %>%
    summarise(pub_count = n(), .groups = "drop")
}

# 批量处理所有作者
all_results <- lapply(author_ids, get_author_yearly_pubs) %>%
  bind_rows()

# 整理成宽格式(可选,按需调整)
wide_format <- all_results %>%
  pivot_wider(names_from = year, values_from = pub_count, values_fill = 0)

# 查看结果
print(all_results) # 长格式(每个作者-年度一行)
print(wide_format) # 宽格式(每个作者一行,年度为列)

关键细节说明

  • 循环遍历:用lapply遍历每个作者ID,调用自定义函数处理,避免仅处理第一个ID。
  • 空数据处理:加入is.null(res$entries)判断,防止某作者无发文数据导致代码报错。
  • 年份提取:从coverDate字段截取前4位作为年份,这是Scopus返回数据中最可靠的发文时间字段。
  • 数据格式转换:用dplyr和tidyr整理数据,长格式适合后续分析,宽格式适合直观查看。

常见问题排查

  • API调用限制:Scopus API有调用频率限制,若作者数量多,建议在循环中加入Sys.sleep(1)延迟,避免被限流。
  • 作者ID格式:确保作者ID是Scopus标准格式(通常以9-开头),格式错误会返回空结果。
  • 字段缺失:若coverDate字段不存在,可尝试用原始JSON字段名prism:coverDate提取,比如res$entries$prism:coverDate``。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 09:01:09