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

Find matching string in list and only keep the matching string

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

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

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

所以我想用list匹配col2然后把数据改成:

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

您可以使用您的列表创建一个正则表达式字符串,然后可以在 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

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