You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R语言中使用正则表达式编辑数据框的行业名称列?

解决R中提取行业大类的正则表达式问题

我来帮你搞定这个提取行业名称大类的需求!你需要保留每个字符串中第一个分隔符(-)左侧的内容,舍弃右侧所有部分,之前尝试的方法没找对正则匹配的逻辑,下面给你可行的解决方案:

为什么之前的方法不生效?

  • stri_trim_right(..., pattern = "[-]"):这个函数是从字符串右侧修剪匹配的字符,只会去掉末尾的减号,不会处理中间的内容,所以第二个字符串会剩下"FINANCIAL SERVICES - Closed End Fund -",不符合预期。
  • stri_trim_right(..., pattern = "[A-Z]"):这是从右侧修剪大写字母,完全偏离了需求,只会去掉最后一个大写字母,结果自然不对。
  • gsub("[^A-Z]","", ...):这个是去掉所有非大写字母的字符,丢失了空格、&这些必要内容,显然不是你要的结果。

正确的解决方案

方法1:基础R的gsub函数

用正则表达式匹配第一个-(空格+减号+空格)及其之后的所有内容,替换为空字符串:

# 构造示例数据
Industries <- c("LEISURE - Restaurants", "FINANCIAL SERVICES - Closed End Fund - Equity", "AEROSPACE/DEFENSE - Aerospace/Defense Products & Services", "METALS & MINING - Industrial Metals & Minerals")
Industries <- data.frame(Industries)

# 提取大类
Industries$Industry_Category <- gsub(" - .*", "", Industries$Industries)

# 查看结果
Industries$Industry_Category

输出结果:

[1] "LEISURE"           "FINANCIAL SERVICES" "AEROSPACE/DEFENSE" "METALS & MINING"

方法2:stringr包的str_remove(更简洁)

如果你习惯用tidyverse系列的包,stringr::str_remove语法更直观:

library(stringr)
Industries$Industry_Category <- str_remove(Industries$Industries, " - .*")

效果和上面的gsub完全一致。

鲁棒性优化(应对分隔符空格不一致的情况)

如果你的数据中分隔符可能存在空格不规范的情况(比如-前后没有空格,或者只有单侧有空格),可以调整正则表达式,匹配任意数量的空格:

# 兼容各种空格情况的正则
Industries$Industry_Category <- gsub("\\s*-\\s*.*", "", Industries$Industries)

这个正则会匹配-前后零个或多个空格,然后去掉之后的所有内容,适用范围更广。

内容的提问来源于stack exchange,提问作者Kirsten

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:39:37