使用data.table有效地进行子集和聚合

时间:2016-04-08 05:29:00

标签: r data.table

我有一个大数据集(几百万行)存储为data.table(我目前正在学习使用该包)。它的格式如下(只是相关列):

DT=data.table("a"=c(11,11,11,12,13,13),"b"=c("x", "y", "z", "y", "x", "y"))
DT
   a  b
1: 11 x
2: 11 y
3: 11 z
4: 12 y
5: 13 x
6: 13 y

我正在尝试构建一个基于“a”中的值输入的函数,在“b”(列表A)中查找与其关联的所有值,然后搜索“a”中的剩余值并返回“b”中具有最多值的值与列表A中的值匹配的那个。

e.g。对于a = 11,列表A是“x,y,z”,对于a = 13,列表A是“x,y” a = 13的期望结果是a = 11(匹配2个值 - “x,y”)

我正在努力寻找最有效的方法。 到目前为止我尝试的是:

toMatch=3
setkey(DT,a)
vals=DT[list(toMatch)]$b

vals
[1] "x" "y"

setkey(DT,b)
temp=data.table("listA"=DT[list(vals)]$a)
temp[,.N, by = names(temp)][order(-N)]

temp
   listA  N
1:     11 2
2:     31 2
3:     21 1

best=temp[listA!=toMatch][1]
   listA
1:    11

这给出了期望的结果,但需要重置密钥(每次都不可行)或构造辅助表,每个辅助表都有自己的密钥。 如前所述,我现在才学习使用data.table - 我相信有更有效的方法来实现这一点。

感谢您的帮助!

0 个答案:

没有答案