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

