如何提取数据框列中括号内的文本?附R语言示例数据
提取DataFrame列中括号内的文本(R实现)
没问题,这就帮你搞定从Name列的括号里提取文本的需求,结合你的示例数据,这里有两种实用的R实现方法:
先确认你的示例数据框
首先把你提供的DataFrame代码整理成可直接运行的完整版本:
df <- structure( list( Name = c("Katie (5676W)", "John (2345G)", "Hex (4563W)", "Mike (4564R)"), Value = c(NA_character_, NA_character_, NA_character_, NA_character_) ), .Names = c("Name", "Value"), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, -4L) )
方法1:使用stringr包(tidyverse生态)
如果你习惯用tidyverse工具链,stringr包的正则函数非常直观:
library(stringr) # 提取括号内文本并添加为新列Code df$Code <- str_extract(df$Name, "\\((.*?)\\)") %>% str_remove_all("\\(|\\)")
str_extract(df$Name, "\\((.*?)\\)"):匹配并提取带括号的内容(比如(5676W))str_remove_all("\\(|\\)"):去掉前后的括号,得到纯文本
方法2:使用Base R(无需额外包)
如果不想加载额外包,Base R的sub函数就能完成,代码更简洁:
# 直接提取括号内文本到新列 df$Code <- sub(".*\\((.*?)\\).*", "\\1", df$Name)
- 正则表达式
.*\\((.*?)\\).*:匹配整个字符串,捕获括号内的内容为第1组 \\1:将整个字符串替换为第1组的内容,直接得到括号内的纯文本
最终结果
运行任意一种方法后,你的DataFrame会新增Code列,结果如下:
| Name | Value | Code |
|---|---|---|
| Katie (5676W) | NA | 5676W |
| John (2345G) | NA | 2345G |
| Hex (4563W) | NA | 4563W |
| Mike (4564R) | NA | 4564R |
注:如果你的数据中存在多个括号的情况,
str_extract只会提取第一个括号的内容;若要提取所有括号内容,可以改用str_extract_all函数。
内容的提问来源于stack exchange,提问作者KT_1
相关产品推荐
相关产品推荐

