【发布时间】:2014-11-06 22:24:31
【问题描述】:
我有以下来自大型 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("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
>
我必须创建一个函数,我可以向其发送可变数量的文本参数,并且该函数应该对数据执行 AND 搜索并输出具有所有文本搜索参数的所有行。不同的搜索字符串可以在不同的列中。
例如 searchfn(ddf, 'brazil','third') 应该只打印出最后一行。
这个case需要忽略。
数据很大,因此搜索需要快速和速度优化(因此使用 data.table)。
我试过了:
searchfn = function(ddf, ...){
ll = list(...)
print(sapply(ll, function(x) grep(x, ddf, ignore.case=T)))
}
它会提取所有发送的搜索字符串并输出搜索到的数字,但搜索不正确。
【问题讨论】:
-
您是从某处的文本文件中导入这些数据吗?如果您将所有内容都视为一堆文本,那么 data.frame/table 格式就会妨碍您。听起来你最好只使用
grep-ing 原始输入文件。您可以通过pipe()或其他方式将其读入 R。 -
好点。但是选择的行需要进行数值统计分析,这是命令提示符下的文本文件无法完成的。因此,在 R 本身中进行文本搜索和子集化可能更容易。
-
我建议您在 R 之外进行过滤,然后读入 R 以进行统计。 Greg 擅长快速文本搜索; R 是为统计数据创建的;两者都不适合。
标签: r search data.table text-search