R中的可变参数快速文本搜索函数
我有一个大型data.table中的以下示例数据:R中的可变参数快速文本搜索函数,r,search,data.table,text-search,R,Search,Data.table,Text Search,我有一个大型data.table中的以下示例数据: ddf = structure(list(id = 1:5, country = c("United States of America", "United Kingdom", "United Arab Emirates", "Saudi Arabia", "Brazil" ), area = c("North America", "Europe", "Arab", "Arab", "South America" ), city = c
ddf = structure(list(id = 1:5, country = c("United States of America",
"United Kingdom", "United Arab Emirates", "Saudi Arabia", "Brazil"
), area = c("North America", "Europe", "Arab", "Arab", "South America"
), city = c("first", "second", "second", "first", "third")), .Names = c("id",
"country", "area", "city"), class = c("data.table", "data.frame"
), row.names = c(NA, -5L))
ddf
id country area city
1: 1 United States of America North America first
2: 2 United Kingdom Europe second
3: 3 United Arab Emirates Arab second
4: 4 Saudi Arabia Arab first
5: 5 Brazil South America third
>
我必须创建一个函数,我可以向它发送可变数量的文本参数,该函数应该对数据执行和搜索,并输出包含所有文本搜索参数的所有行。不同的搜索字符串可以位于不同的列中
例如,searchfn(ddf,'巴西','第三')应该只打印最后一行
这个案子需要被忽略
数据量很大,因此需要快速优化搜索速度(因此需要使用data.table)
我试过:
searchfn = function(ddf, ...){
ll = list(...)
print(sapply(ll, function(x) grep(x, ddf, ignore.case=T)))
}
它拾取所有发送的搜索字符串并输出搜索的数字,但搜索不正确 这似乎有效,但我怀疑这是一个最佳解决方案:
searchfn = function(ddf, ...){
ll = list(...)
pat <- paste(unlist(ll), collapse = "|")
X <- do.call(paste, ddf)
Y <- regmatches(X, gregexpr(pat, X, ignore.case = TRUE))
ddf[which(vapply(Y, function(x) length(unique(x)), 1L) == length(ll)), ]
}
是否从某个文本文件导入此数据?如果你把所有东西都当作一堆文本,那么data.frame/table格式就成了障碍。听起来你最好只
grep
-ing原始输入文件。您可以通过pipe()
或其他方式将其读入R。这一点很好。但是,所选行需要进行数值统计分析,这无法在命令提示下使用文本文件完成。因此,在R本身中进行文本搜索和子集设置可能更容易。我建议您在R之外进行过滤,然后读入R进行统计。格雷格擅长快速文本搜索;R是为stats创建的;两者都不好。
searchfn(ddf, 'brazil', 'third')
searchfn(ddf, 'arab', 'first')
searchfn(ddf, "united", "second")
searchfn(ddf, "united", "second", "2")
searchfn(ddf, "united", "second", "Euro")