如何检查和删除R中一列中的字符串是否与另一列中的字符串匹配

如何检查和删除R中一列中的字符串是否与另一列中的字符串匹配,r,dataframe,R,Dataframe,我有一个大的数据帧。 样本数据: > df <- data.frame(MAKE = c('FORD','FORD','FORD','BMW','BMW'), + MODEL = c('ECO SPORT','ECO SPORT','ECO SPORT','3 SERIES','5 SERIES'), + VARIANT = c('ECOSPORT 1.0','ECOSPORT 1.5','ECOSPORT 1.

我有一个大的数据帧。 样本数据:

> df <- data.frame(MAKE = c('FORD','FORD','FORD','BMW','BMW'),
+                    MODEL = c('ECO SPORT','ECO SPORT','ECO SPORT','3 SERIES','5 SERIES'),
+                  VARIANT = c('ECOSPORT 1.0','ECOSPORT 1.5','ECOSPORT 1.5','E90','5 SERIES F(10)'),
                   stringsAsFactors = 0)
> 
> df
  MAKE     MODEL        VARIANT
1 FORD ECO SPORT   ECOSPORT 1.0
2 FORD ECO SPORT   ECOSPORT 1.5
3 FORD ECO SPORT   ECOSPORT 1.5
4  BMW  3 SERIES            E90
5  BMW  5 SERIES   5 SERIES F(10)
> 

我们可以使用
str\u remove

library(dplyr)
library(stringr)   
df %>%
    mutate_if(is.factor, as.character) %>%
    mutate(VARIANT  = str_remove_all(VARIANT,
              str_remove(MODEL, '(?<=[A-Z]) (?=[A-Z])')))
#  MAKE     MODEL VARIANT
#1 FORD ECO SPORT     1.0
#2 FORD ECO SPORT     1.5
#3 FORD ECO SPORT     1.5
#4  BMW  3 SERIES     E90
#5  BMW  5 SERIES   F(10)
库(dplyr)
图书馆(stringr)
df%>%
如果(is.factor,as.character)%>%,则进行变异
变异(VARIANT=str\u remove\u all(VARIANT,

str_remove(MODEL,“(?
“ECO SPORT”
“ECO SPORT”
中找不到)(反之亦然)。如果您希望模糊字符串匹配或不带空格的匹配,您应该更明确。(它们都是可行的,但您确定了要匹配类似字符串的距离吗?)(我在R-3.6上,不确定您或OP是否在R-4.0上否定了这一担忧)从
ECO-SPORT
中检测不到
ECOSPORT
。我认为OP需要澄清一些事情。我使用的是R4.0是的,在问题中添加了stringsAsFactors。@KarthikS这是基于我在你的帖子中注意到的模式,除了最后一行数字和字母之间有空格外,它需要作为一个整体或el匹配se我们需要删除“ECO SPORT”中的空格。通过使用正则表达式环视,它告诉我们要检查一个字母后面的空格和另一个字母前面的空格,这样它就不会匹配digitOk后面的空格,现在我明白了。
> df
  MAKE     MODEL        VARIANT
1 FORD  ECO SPORT         1.0
2 FORD  ECO SPORT         1.5
3 FORD  ECO SPORT         1.5
4  BMW   3 SERIES         E90
5  BMW   5 SERIES         F(10)
> 
library(dplyr)
library(stringr)   
df %>%
    mutate_if(is.factor, as.character) %>%
    mutate(VARIANT  = str_remove_all(VARIANT,
              str_remove(MODEL, '(?<=[A-Z]) (?=[A-Z])')))
#  MAKE     MODEL VARIANT
#1 FORD ECO SPORT     1.0
#2 FORD ECO SPORT     1.5
#3 FORD ECO SPORT     1.5
#4  BMW  3 SERIES     E90
#5  BMW  5 SERIES   F(10)