如何在R语言中提取字符串括号内内容及Form_Number后的数值?
在R中提取字符串特定内容并新增列的实现方法
原始数据集
data <- data.frame(id = c(1,2), text = c("GK_Conciencia fonologica (FSS)_Form_Number_1.csv", "G1_Conciencia fonologica (FSL)_Form_Number_3.csv"))
需求说明
需要从text列中提取两类信息并新增列:
- 提取括号内的文本,存入
cat列 - 提取
Form_Number_后的数值,存入form列
实现方法
方法一:Base R 原生实现
利用regmatches配合正则表达式完成提取,无需额外安装包:
# 提取括号内的文本并去除括号 data$cat <- regmatches(data$text, regexpr("\\((.*?)\\)", data$text)) |> gsub(pattern = "\\(|\\)", replacement = "") # 提取Form_Number后的数字并转换为整数 data$form <- regmatches(data$text, regexpr("Form_Number_(\\d+)", data$text)) |> gsub(pattern = "Form_Number_", replacement = "") |> as.integer()
方法二:tidyverse + stringr 简洁实现
如果习惯使用tidyverse生态,可以用stringr包的断言正则直接提取目标内容:
library(tidyverse) data <- data |> mutate( # 用正向断言匹配括号之间的内容 cat = str_extract(text, "(?<=\\().*?(?=\\))"), # 匹配Form_Number_后的数字并转为整数 form = str_extract(text, "(?<=Form_Number_)\\d+") |> as.integer() )
最终结果
运行上述任意方法后,数据集将变为:
id text cat form 1 1 GK_Conciencia fonologica (FSS)_Form_Number_1.csv FSS 1 2 2 G1_Conciencia fonologica (FSL)_Form_Number_3.csv FSL 3
内容的提问来源于stack exchange,提问作者amisos55
相关产品推荐
相关产品推荐

