我希望从数据中的一列中删除特定的单词(例如“co”“INC”等),而不从同一列中的其他单词中删除相同的字母。换句话说,我只想删除这些词时,他们是免费的。
下面是company_name数据的几行和几列的示例:
| 国家|公司名称|工人人数|
| --------------|--------------|--------------|
| x|高露洁棕榄公司|10个|
| y|老铜公司|七十七|
| z|NIKE INC -CL B|五|
| r|商业金属|二十三|
| w|嘉年华公司|八九|
我使用了以下代码来删除单词:
remove <- company_name %>%
mutate(Company_Name = str_remove_all(Company_Name, "-CL B|INC|CORP|CO|CO."))
我得到的回报并不是我所期望的。例如,在公司的情况下“嘉年华公司& PLC”我得到了“嘉年华演说& PLC”回来,其中“CO从一开始就被删除了”公司“
我想达到的目的是,只有当这些词本身是完整的词时,它们才能被删除。我还尝试在代码中的单词前后包含空格,如下所示:
remove <- company_name %>%
mutate(Company_Name = str_remove_all(Company_Name, " -CL B | INC | CORP | CO | CO. "))
但我还是没有得到我想要的结果。
2条答案
按热度按时间kq0g1dla1#
您可以使用正则表达式语法
\\b
,它设置单词边界,并且对于处理您所说的“完整单词”非常有用。注意,你必须在\\bCO\\b
之前列出\\bCO\\b.
,因为匹配是按顺序完成的。我没有为“-CL B”使用单词边界,但如果需要,可以将匹配的非字母部分放在单词边界e之外。例如-\\bCL B\\b
:我逐字复制了你的示例列标题,因为它们有空格,所以在声明时需要在反引号内。如果实际列名中没有空格,则不需要反引号。
jfewjypa2#
我想这样的东西会起作用:
其中
"(^|\\s+)"
匹配要删除的字符串之前的字符串开头(^
或空白)。"\\.?"
匹配可选句点"(?=\\s+|$)")
匹配更多的空格或字符串的结尾。(This答案假设您也希望删除“INC.”和“CORP.“虽然这在你的问题中没有具体说明)。