如何在R中合并数据框,生成指定格式的研究者年度论文统计结果?
解决方案(基于tidyverse工具包)
首先确保安装并加载tidyverse工具链:
install.packages("tidyverse") library(tidyverse)
1. 拆分工作经历为年度行记录
针对研究者工作经历数据框(假设名为researcher_experience),将每段任职经历展开为每年一行的记录:
# 创建研究者唯一标识(姓+名首字母) researcher_experience <- researcher_experience %>% mutate(RESEARCHER_ID = str_c(LASTNAME, "_", FIRSTNAMEINITIAL)) %>% # 按任职段拆分年度 group_by(LASTNAME, FIRSTNAMEINITIAL, STARTYEAR, ENDYEAR, POSITION, RESEARCHER_ID) %>% expand(YEAR = STARTYEAR:ENDYEAR) %>% ungroup()
此步骤直接将起止年份区间拆分为单独的年度行,解决多段经历拆分的问题。
2. 匹配研究者与论文作者,过滤唯一姓名组合
先过滤掉姓名组合重复的研究者,再处理论文数据匹配对应作者:
# 第一步:仅保留LASTNAME+FIRSTNAMEINITIAL唯一的研究者 unique_researchers <- researcher_experience %>% distinct(LASTNAME, FIRSTNAMEINITIAL, RESEARCHER_ID, .keep_all = FALSE) # 第二步:拆分论文作者列并提取姓名信息(假设作者格式为"Doe J, Potter H") paper_authors <- journal_papers %>% separate_rows(AUTHORS, sep = ", ") %>% mutate( LASTNAME = str_extract(AUTHORS, "^[A-Za-z]+"), FIRSTNAMEINITIAL = str_extract(AUTHORS, "\\b[A-Za-z]$"), RESEARCHER_ID = str_c(LASTNAME, "_", FIRSTNAMEINITIAL) ) %>% # 仅保留与唯一研究者匹配的作者记录 inner_join(unique_researchers, by = "RESEARCHER_ID")
此步骤完成姓名匹配并过滤重复姓名组合的研究者,解决第二个核心难点。
3. 统计年度发文量并合并数据
先统计每个研究者每年的论文发表数,再与拆分后的工作经历数据合并:
# 统计研究者年度发文量 researcher_paper_counts <- paper_authors %>% group_by(RESEARCHER_ID, PUBYEAR) %>% summarise(PAPER_COUNT = n(), .groups = "drop") %>% rename(YEAR = PUBYEAR) # 合并工作经历与发文量,未发文年度填充为0 final_df <- researcher_experience %>% left_join(researcher_paper_counts, by = c("RESEARCHER_ID", "YEAR")) %>% replace_na(list(PAPER_COUNT = 0)) %>% # 整理列顺序(可选) select(LASTNAME, FIRSTNAMEINITIAL, YEAR, POSITION, PAPER_COUNT)
补充说明
- 若论文AUTHORS列格式不同(如名在前、含中间名),需调整正则表达式适配姓名提取逻辑;
- 若任职经历的
ENDYEAR为当前年份,可替换为year(Sys.Date())确保包含当前年度; - 若需区分同名研究者,需补充机构等额外标识字段,当前方案仅适配姓名组合唯一的场景。
内容的提问来源于stack exchange,提问作者EulersNumber
相关产品推荐
相关产品推荐

