我正在寻找使用grep/like/stri_detect条件在字符列上连接2个data.frames/data.tables的有效方法.
我可以使用sqldf包加入类似,但速度很慢.在我的2个data.tables(5k行,20k行)上大约需要60秒.
我的第二种方法是使用data.table中的CJ,然后在2列上使用stri_detect_fixed.这种方法更快(16秒),但我担心随着数据的增长,它将无法使用(它显着增加了ram的使用).
我也尝试在for循环中进行,但它是最慢的.
有没有办法更快地完成它,尤其是在data.table中?
下面我粘贴我的示例:
library(stringi)
library(data.table)
library(sqldf)
data1 <- data.table(col1 = paste0(c("asdasd asdasd 768jjhknmnmnj",
"78967ggh","kl00896754","kl008jku"),1:10000))
data2 <- data.table(col2 = paste0(c("mnj", "12345","kl008","lll1"), 1:10000))
system.time(join1 <- data.table(sqldf("select *
from data1 a inner join data2 b
on a.col1 like '%' || b.col2 || '%'", drv = "SQLite" )))
system.time(kartezjan <- CJ(col1 = data1[,c("col1"), with = F][[1]],
col2 = data2[,c("col2"), with = F][[1]],
unique = TRUE)[stri_detect_fixed(col1, col2, case_insensitive = FALSE)])
Run Code Online (Sandbox Code Playgroud)