在R语言中拆分fiction_work列为work、author、year三列的方法
拆分含年份的文本列解决方案
假设你的fiction_work列内容格式类似"作品名, 作者名 (YYYY)",可以用两种方法拆分出work、author、year三列:
方法一:分步拆分(更直观)
先用separate拆分出作品名和「作者+年份」的组合列,再拆分作者和年份,最后清理年份的括号:
library(tidyr) library(stringr) # 第一步:拆分作品名和作者年份组合 separated <- separate(total, col = fiction_work, into = c("work", "author_year"), sep = ",\\s*") # 第二步:拆分作者和年份,以「空格+左括号」为分隔符 separated <- separate(separated, col = author_year, into = c("author", "year"), sep = "\\s*\\(") # 清理年份列的右括号 separated$year <- str_remove(separated$year, "\\)")
方法二:正则一步提取(更高效)
用extract配合正则表达式,直接匹配出三个部分:
library(tidyr) separated <- extract(total, col = fiction_work, into = c("work", "author", "year"), regex = "^(.*?),\\s*(.*?)\\s*\\((\\d{4})\\)$")
正则说明:
^(.*?),\\s*:匹配开头到逗号的内容(作品名),忽略逗号后的空格(.*?)\\s*\\(:匹配逗号后到左括号前的内容(作者名),忽略作者和左括号间的空格(\\d{4}):匹配括号内的四位数字年份\\)$:匹配结尾的右括号
如果你的文本格式有细微差异(比如年份不是四位、作者和括号间无空格),只需调整正则中的匹配规则即可。
内容的提问来源于stack exchange,提问作者user20053915
相关产品推荐
相关产品推荐

