在列表中查找匹配的字符串,只保留匹配的字符串

时间:2018-01-29 10:19:00

标签: r string data-cleaning

我在R中有一个列表,其中包含多个字符串,我需要在数据框中与我的列匹配,并且只保留匹配的字符串。

list <- c('Ford', 'Toyota', 'BMW')

Col1         Col2         
1            Ford A1
2            Toyota Prius
3            BMW B2
4            Ford A2
5            Tesla T1

所以我想将Col2与list匹配,然后将数据更改为:

Col1         Col2         
1            Ford
2            Toyota
3            BMW
4            Ford
5            Tesla T1

1 个答案:

答案 0 :(得分:1)

您可以使用列表创建正则表达式字符串,然后可以在sub调用中使用该字符串:

regex.string <- paste0( ".*(", paste( list, collapse = "|" ), ").*" )

这使得字符串:

> regex.string
[1] ".*(Ford|Toyota|BMW).*"

现在在子调用中使用它:

df$Col2 <- sub( regex.string, "\\1", df$Col2 )

因此正则表达式会查找list中包含的任何值,如果找到它,它会将整个文本值替换为找到的值。

结果:

> df
  Col1     Col2
1    1     Ford
2    2   Toyota
3    3      BMW
4    4     Ford
5    5 Tesla T1

注意:如下所述,对于包含特殊正则表达式字符的汽车品牌,这可能会中断。