如何在R语言中按指定标识分割文本创建新变量?
R语言实现文本分割生成新变量
你可以通过正则表达式结合stringr包的函数来实现这个需求,核心是匹配XYZ-1或AAA-2作为分割节点,把原字符串拆分成Study和Question两部分。
方法一:拆分字符串后重组
先加载stringr包,用正则指定分割规则拆分字符串,再拼接出目标列:
# 加载处理字符串的包 library(stringr) # 初始数据集 Name <- c("A B XYZ-1 Where","C AAA-2 When","ABC R SS XYZ-1 Where") x <- data.frame(Name) # 按"XYZ-1 "或"AAA-2 "拆分字符串,分成3个部分 split_data <- str_split_fixed(x$Name, "(XYZ-1|AAA-2)\\s", n = 3) # 拼接得到Study列(前缀+分割标识),提取Question列 x$Study <- paste0(split_data[,1], split_data[,2]) x$Question <- split_data[,3]
方法二:直接提取目标内容
用正则分别匹配Study和Question的内容,一步到位:
library(stringr) # 初始数据集 Name <- c("A B XYZ-1 Where","C AAA-2 When","ABC R SS XYZ-1 Where") x <- data.frame(Name) # 提取Study:匹配到XYZ-1或AAA-2为止的全部内容 x$Study <- str_extract(x$Name, ".+(XYZ-1|AAA-2)") # 提取Question:去掉Study部分及后续空格 x$Question <- str_remove(x$Name, paste0(x$Study, "\\s"))
最终结果
执行代码后,数据集x会生成你需要的结构:
Name Study Question 1 A B XYZ-1 Where A B XYZ-1 Where 2 C AAA-2 When C AAA-2 When 3 ABC R SS XYZ-1 Where ABC R SS XYZ-1 Where
内容的提问来源于stack exchange,提问作者Bruh
相关产品推荐
相关产品推荐

