Отредактировано: я использовал функцию «apply», чтобы выполнить следующее в каждой строке tab1: функция внутри «apply», берет x [1], которое является ключевым словом (скажем, «Ripe Yellow Banana»), strsplit разбивает егочерез пробел («Спелый», «Желтый», «Банановый»), sapply выполняет grepl для каждого из этих разбиений, чтобы увидеть, существует ли шаблон в tab2.таким образом, у вас будет 3 колонны истинных ложных фраз для «Спелых», «Желтых» и «Банановых»Следующим шагом является подсчет количества истин для каждой строки и вывод табуляции с этим номером строки.Я также поместил оператор if, чтобы дать NA, если максимальное число истин равно 0:
tab1<-data.frame(Keyword=c("Phillips Trimmer",
"Buy Samsung Mobile","Ripe Yellow Banana","Pepsi"),
PageView=c(123,45,63,140))
tab2<-data.frame(Keyword=c("Electric Trimmer","Samsung Mobile",
"Yellow Ripe Banana","Samsung S6","Banana",
"Phillips","Trimmer Phillips","Buy Trimmer Philips"),
PageView=c(123,45,63,304,105,209,29,21))
tab2$StrLen<-apply(tab2,1,function(x)length(unlist(strsplit(x[1], " "))))
tab1$BestMatch<-apply(tab1,1,function(x){
a <-sapply(unlist(strsplit(x[1], " ")), grepl, tab2$Keyword)
a<-cbind(a,TRUECnt=rowSums(a==TRUE))
a<-as.data.frame(a)
a$StrLen <- length(unlist(strsplit(x[1], " ")))
if (max(a$TRUECnt)==0){
return(NA)
}
return(as.character(tab2[which(a$TRUECnt==max(a$TRUECnt) &
tab2$StrLen <= a$StrLen),]$Keyword))
})
View(tab1) View(tab1)
# Keyword PageView BestMatch
# 1 Phillips Trimmer 123 Trimmer Phillips
# 2 Buy Samsung Mobile 45 Samsung Mobile
# 3 Ripe Yellow Banana 63 Yellow Ripe Banana
# 4 Pepsi 140 <NA>