在R中按字符串匹配递归拆分多作者信息并添加对应列
多作者姓名拆分到动态列的R实现
示例数据
先构造与需求匹配的测试数据:
library(tidyverse) df <- tibble( id = 1:3, Author = c( "Last, First & Last, First", "Last, First & Last, First & Last, First & Last, First", "Last, First & Last, First & Last, First" ) )
批量拆分实现代码
使用tidyverse工具链可自动处理可变数量的作者,无需预设列数:
df_processed <- df %>% # 将每个作者拆分为单独行,分隔符为" & " separate_rows(Author, sep = " & ") %>% # 从"Last, First"格式中提取姓和名 extract(Author, into = c("Last", "First"), regex = "(.*), (.*)") %>% # 按id分组,为每个作者分配序号 group_by(id) %>% mutate(num = row_number()) %>% ungroup() %>% # 转换为宽格式,自动生成First1/Last1等列,缺失值填充为空 pivot_wider( id_cols = id, names_from = num, values_from = c(First, Last), names_glue = "{.value}{num}", values_fill = "" )
代码说明
separate_rows:把一行中的多个作者拆分成多行,每个作者占一行,简化后续拆分逻辑extract:通过正则表达式精准匹配"姓, 名"格式,一次性提取姓和名,比手动strsplit更稳定row_number():为每个id下的作者按顺序编号,作为列名的数字后缀pivot_wider:将长格式数据转换为需求的宽格式,names_glue控制列名格式,values_fill确保作者数量不足的位置显示为空
运行后得到的结果完全符合要求,且兼容单作者、多作者的所有场景。
内容的提问来源于stack exchange,提问作者bvecc
相关产品推荐
相关产品推荐

