我在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函数,但它不显示结果。实际上,我需要使用“匹配元素”创建一个新表。谢谢
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)]))