R data.table - 通过由 2 列组成的键搜索多行

R data.table - searching for multiple rows by key which is composed of 2 columns

我有一个 data.table,其中两列 (V1,V2) 设置为键。第三列包含多个值。

我有另一个 data.table,其中包含我想在第一个 table 键中搜索的对,以及 return V3 中列表的联合列表。

locations<-data.table(c(-159.58,0.2,345.1),c(21.901,22.221,66.5),list(c(10,20),c(11),c(12,33)))
setkey(locations,V1,V2)

searchfor<-data.table(lon=c(-159.58,345.1,11),lat=c(21.901,66.5,0))

最终结果应该是这样的:

[1] 10 20 12 33

仅搜索一项时,以下内容有效。

locations[.(-159.58,21.901),V3][[1]]
[1] 10 20

我不知道如何概括这一点并使用 table "searchfor" 作为搜索索引的来源(顺便说一句 - "searchfor" table 可以更改如果它使解决方案更容易,则为不同的格式)。 另外,我如何将 V3 中的不同值合并到一个列表中?

您可以使用与 data.table 相同的语法作为索引。

lst <- locations[ .(searchfor), V3]

您可能只想使用非空元素。如果是这样,你可以直接使用 nomatch=0L argument:

locations[ .(searchfor), V3, nomatch=0L]
# [[1]]
# [1] 10 20
# 
# [[2]]
# [1] 12 33

这将 return 一个列表。如果你想 return 一个向量,使用基函数 unlist() 如下:

locations[ .(searchfor), unlist(V3), nomatch=0L]
# [1] 10 20 12 33