我在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
答案 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
注意:如下所述,对于包含特殊正则表达式字符的汽车品牌,这可能会中断。