fuzzyjoin
-пакетное решение с использованием regex_join
У него есть некоторые (потенциальные) проблемы, когда текст соответствует нескольким ключевым словам. Вы можете отфильтровать это позже, если хотите. Или, лучше, откорректируйте столбец Keyword для фактических регулярных выражений ...
пример данных
library( data.table)
library( fuzzyjoin )
dt1 <- fread('S.No Keyword
1 DKB105A
2 DLB01SA
3 B107A0
4 LB104A0
5 KA02SA
6 A02SA')
dt2 <- fread('ID Date Text
1 2/11/2020 wrong_B107A0/act
2 2/12/2020 gra/A02SA_fin
3 2/13/2020 Acc/DKB105A/acnt
4 2/14/2020 DLB01SA
5 2/15/2020 KA02SA_attr_to
6 2/16/2020 ""')
код
fuzzyjoin::regex_left_join( dt2, dt1, by = c( Text = "Keyword"))
вывод
# ID Date Text S.No Keyword
# 1: 1 2/11/2020 wrong_B107A0/act 3 B107A0
# 2: 2 2/12/2020 gra/A02SA_fin 6 A02SA
# 3: 3 2/13/2020 Acc/DKB105A/acnt 1 DKB105A
# 4: 4 2/14/2020 DLB01SA 2 DLB01SA
# 5: 5 2/15/2020 KA02SA_attr_to 5 KA02SA
# 6: 5 2/15/2020 KA02SA_attr_to 6 A02SA
# 7: 6 2/16/2020 NA <NA>
обновление
с включенной силой регулярных выражений ...
fuzzyjoin::regex_left_join( dt2, copy(dt1)[, regex := paste0("[^a-zA-Z]", Keyword, "|^", Keyword)],
by = c( Text = "regex"))[, -"regex"]
# ID Date Text S.No Keyword
# 1: 1 2/11/2020 wrong_B107A0/act 3 B107A0
# 2: 2 2/12/2020 gra/A02SA_fin 6 A02SA
# 3: 3 2/13/2020 Acc/DKB105A/acnt 1 DKB105A
# 4: 4 2/14/2020 DLB01SA 2 DLB01SA
# 5: 5 2/15/2020 KA02SA_attr_to 5 KA02SA
# 6: 6 2/16/2020 NA <NA>