gpt4 book ai didi

r - `data.table` 基于 `agrep` 选择子集的方法?

转载 作者:行者123 更新时间:2023-12-04 05:02:20 26 4
gpt4 key购买 nike

我正在尝试从 data.frame 转换至 data.table ,并且需要一些关于我正在尝试在单个列上执行的逻辑索引的建议。这是我有的一张表:

places <- data.table(name=c('Brisbane', 'Sydney', 'Auckland',
'New Zealand', 'Australia'),
search=c('Brisbane AU Australia',
'Sydney AU Australia',
'Auckland NZ New Zealand',
'NZ New Zealand',
'AU Australia'))

# name search
# 1: Brisbane Brisbane AU Australia
# 2: Sydney Sydney AU Australia
# 3: Auckland Auckland NZ New Zealand
# 4: New Zealand NZ New Zealand
# 5: Australia AU Australia

setkey(places, search)

我想提取 search 的行column 匹配列表中的所有单词,如下所示:
words <- c('AU', 'Brisbane')
hits <- places
for (w in words) {
hits <- hits[search %like% w]
}
# I end up with the 'Brisbane AU Australia' row.

我有一个问题:

有没有更多 data.table - 这样做的方法?在我看来,存储 hits每次似乎都是 data.frame方法来做到这一点。

这取决于我最终想使用 agrep 的警告。而不是 grep/ %like% :
words <- c('AU', 'Bisbane') # note the mis-spelling
hits <- places
for (w in words) {
hits <- hits[agrep(w, search)]
}

我觉得这并没有充分利用 data.table的功能,并会很感激有关如何修改代码的想法。

编辑
我想要 for 循环,因为 places非常大,我只想找到匹配所有单词的行。因此我只需要在结果中搜索下一个词的最后一个词(即依次优化结果)。

随着 data.table 中“二进制扫描”与“矢量扫描”的讨论介绍(即“坏方法”是 DT[DT$x == "R" & DT$y == "h"],“好方法”是 setkey(DT, x, y); DT[J("R", "h")] 我只是想知道是否有某种方法可以在这里应用这种方法。

最佳答案

Mathematical.coffee,正如我在评论中提到的,您不能通过将一列(或更多列)设置为关键列来“部分匹配”。也就是说,在 data.table地方,您已将“搜索”列设置为关键列。在这里,您可以使用 data.table's 快速子集通过执行以下操作进行二分搜索(与矢量扫描子集相反):

places["Brisbane AU Australia"] # binary search when "search" column is key'd
# is faster compared to:

places[search == "Brisbane AU Australia"] # vector scan

但在你的情况下,你需要:
places["AU"] 

给所有行在键列中具有“AU”的部分匹配。这是不可能的(虽然它确实是一个非常有趣的功能)。

如果 substring您正在搜索本身不包含不匹配项,那么您可以尝试将搜索字符串拆分为单独的列。即列 search如果拆分为包含 Brisbane 的三列, AUAustralia ,然后可以设置 data.table的key到包含 AU 的列和 Brisbane .然后,您可以查询您提到的方式:
# fast subset, AU and Brisbane are entries of the two key columns
places[J("AU", "Brisbane")]

关于r - `data.table` 基于 `agrep` 选择子集的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15984077/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com