У меня есть 2 набора данных.
a <- c("adidas shoes","hot tea","pizza","hill station")
b <- c("shoes","plastic cup","pizza","I love to go to hill","travelling in motor van",
"buy adidas shoes","run using adidas shoes")
Я хочу сопоставить каждое слово в каждом предложении 1-го вектора со всеми элементами второго вектора и выбрать то, в котором совпадает максимальное количество слов.
Для этого я использовал следующий код:
a_split <- unlist(strsplit(a[1,], " "))
b_split <- unlist(strsplit(b[1,], " "))
a$match_perc[1] <- length(intersect(a_split, b_split))/length(a_split)*100
так что, по сути, я пытаюсь сделать так: сопоставьте «adidas» и «shoes» [1-й элемент вектора «a»] со всеми элементами вектора «b» и, наконец, придумали лучшее соответствующий процент и повторите это для всех элементов «а». Если процент будет одинаковым, мы всегда будем брать самый высокий процент. По сути, для каждого предложения у меня будет только одно соответствующее предложение в виде одного соответствующего процента. Если у нас одинаковый наибольший процент, мы примем 1-й матч.
Ожидаемый результат ниже:
a <- c("adidas shoes","hot tea","pizza","hill station")
Matching_String <- c("buy adidas shoes","NA","pizza","I love to go to hill")
match_perc <- c(100,0,100,50)
final_op <- data.frame(a,Matching_String,match_perc)