如何移除数据列中特定关键词及之后的所有内容
在R中清理公司名称列:移除特定关键词及其后续内容
需求说明
需要处理数据框中的company_name列,移除"aka"或"dba"这两个关键词以及它们之后的所有字符,同时兼容关键词前后可能存在的多个空格情况。
原始数据结构
df <- structure(list(Number.of.Workers = c("82", "82", "79", "79", "71", "65", "62", "58", "56", "53", "49"), company_name = c("valley ho hotels aka kings inn", "aluminum precision products", "levity of brea dba brea improv", "crunch", "comedy club of los angeles dba hollywood improv", "andre-boudin bakeries inc dba boudin", "comedy club of san jose dba san jose improv", "comedy club of brea dba ontario improv", "sprout bost ", "culver west lp - playa provisions", "faa concord h dba concord honda")), row.names = 5195:5205, class = "data.frame")
解决方案
方法1:使用stringr包(tidyverse生态,语法更直观)
先加载stringr包,然后用正则表达式匹配并移除目标内容:
library(stringr) # 方式一:直接移除关键词及后续内容 df$cleaned_company_name <- str_remove_all(df$company_name, "\\s*(aka|dba).*") # 方式二:提取关键词之前的内容(无关键词则保留原内容) df$cleaned_company_name <- str_extract(df$company_name, "^.*?(?=\\s*(aka|dba))|^.*$")
方法2:基础R的gsub函数(无需额外安装包)
用基础R的正则替换功能直接处理:
df$cleaned_company_name <- gsub("\\s*(aka|dba).*", "", df$company_name)
正则说明
\\s*:匹配0个或多个空格(兼容关键词前有多个空格的情况)(aka|dba):匹配"aka"或"dba"任意一个关键词.*:匹配关键词之后的所有字符- 替换为空字符串
""即可实现移除效果
处理后示例结果
| 行号 | 原company_name | cleaned_company_name |
|---|---|---|
| 5195 | valley ho hotels aka kings inn | valley ho hotels |
| 5197 | levity of brea dba brea improv | levity of brea |
| 5198 | crunch | crunch |
| 5200 | andre-boudin bakeries inc dba boudin | andre-boudin bakeries inc |
内容的提问来源于stack exchange,提问作者bear_525
相关产品推荐
相关产品推荐

