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
我有一个 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