【发布时间】:2020-02-26 23:19:36
【问题描述】:
有一个data.table dt,每行有一列包含文本句子(dt$text)。 然后,有一个带有短语的字典(较小的data.table,带有短语列:dict$word和带有数字的dict$lookup_n列,对应于字典中的每个短语)。
我需要检查 dt 中的每个句子值,如果字典中的短语是 dt 句子(字符串)的一部分,则将短语放入 dt$yes 列中,并将 dict$lookup_n 列中的值放入 dict一个 dt 列 dt$lookup_num。 最快的方法是什么? 我知道,我可以使用以下命令搜索文本字符串中的文本:grepl("Search_word, "Text_to_search", fixed=TRUE)。 我尝试执行以下(示例)暴力循环:
dt = data.table( text = c('cat, dog books.', 'horse', 'kits fits. mits, bits'))
dt$yes <- ''
dt$lookup_num <- 0
dt
dict = data.table( word = c('cat, dog ', 'kits'), lookup_n = c(8, 7))
#working!
for(i in 1:nrow(dt)) {
for (j in 1:nrow(dict)){
if (dt[i, 'yes'] == '' & grepl(dict[j,word], dt[i,text], fixed=TRUE)) {
dt[i,'yes'] <- dict[j,word]
dt[i,'lookup_num'] <- dict[j,lookup_n]}
}
}
dt
另外,有没有比循环遍历 dt 和 dict 更快的方法?
【问题讨论】:
-
你能分享
dput(dict)和dput(dt)的输出吗?如果很大,请申请head(data, 20)。
标签: r string dictionary search data.table