如何检查和删除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)