如何找到无序字符串之间的匹配项

问题描述 投票:0回答:1

我在R中有两个数据帧。这是第一个(只是一个示例):

ID  Cost        Vehicle_1
6   4291.667    FIAT PUNTO 1.4 EVO
2   5391.667    FIESTA 1.6 120CV 
4   4291.667    FIESTA 1.6 120CV 
7   3500.000    FIESTA 1.6 120CV 
5   4291.667    SEAT IBIZA 1.4 85CV
1   5391.667    SEAT IBIZA 85CV 1.4 

这是第二个(只是一个示例):

Vehicle_2                          cost
FIAT PUNTO EVO 1.3 MJT 95CV DPF    0.4021967    
FIAT PUNTO EVO 1.3/16V MJT 75CV    0.3737767    
FIAT PUNTO EVO 1.4 77CV     
FIAT PUNTO EVO 1.4 77CV BENZ+GPL   0.4036200    
FIAT PUNTO EVO 1.4 77CV BENZ+MET   0.4122800    
FIAT PUNTO EVO 1.4 M.AIR 105CV     0.4702500

我需要找到第一个数据帧的Vehicle_1列和第二个数据帧的Vehicle_2列之间的匹配项,即使字符串的顺序不同并且有一些单词more / less。我尝试使用all.equal函数,但它不显示结果。实际上,我需要使用“匹配元素”创建一个新表。谢谢

r string mismatch
1个回答
0
投票
df1 <- data.frame("ID" = 1:6, "Vehicle_1" = c("FIAT PUNTO 1.4 EVO", "FIESTA 1.6 120CV", "FIESTA 1.6 120CV", "FIESTA 1.6 120CV", "SEAT IBIZA 1.4 85CV", "SEAT IBIZA 85CV 1.4")) df2 <- data.frame("ID" = 1:6, "Vehicle_2" = c("FIAT PUNTO EVO 1.3 MJT 95CV DPF", "FIAT PUNTO EVO 1.3/16V MJT 75CV", "FIAT PUNTO EVO 1.4 77CV", "FIAT PUNTO EVO 1.4 77CV ", "FIAT PUNTO EVO 1.4 77CV BENZ+GPL", "FIAT PUNTO EVO 1.4 M.AIR 105CV ")) head(df1) head(df2) df1 <- data.table::setDT(df1) df2 <- data.table::setDT(df2) list1 <- df1[, tstrsplit(Vehicle_1, split = ' ')] list2 <- df2[, tstrsplit(Vehicle_2, split = ' ')] ncol1 <- ncol(list1) list_to_check <- cbind(list1,list2) apply(list_to_check,MARGIN = 1, FUN = function(x) intersect(x[1:ncol1], x[ncol1+1:length(x)]))
© www.soinside.com 2019 - 2024. All rights reserved.