相关疑难解决方法(0)

使用二进制搜索而不是矢量扫描,仅按2列密钥的第二列对data.table进行子集化

我最近发现了二进制搜索data.table.如果表格在多个键上排序,则只能在第二个键上搜索?

DT = data.table(x=sample(letters,1e7,T),y=sample(1:25,1e7,T),rnorm(1e7))
setkey(DT,x,y)
#R> DT[J('x')]
#        x  y       V3
#     1: x  1  0.89109
#     2: x  1 -2.01457
#    ---              
#384922: x 25  0.09676
#384923: x 25  0.25168
#R> DT[J('x',3)]
#       x y       V3
#    1: x 3 -0.88165
#    2: x 3  1.51028
#   ---             
#15383: x 3 -1.62218
#15384: x 3 -0.63601
Run Code Online (Sandbox Code Playgroud)

编辑:感谢@Arun

R> system.time(DT[J(unique(x), 25)])
   user  system elapsed 
  0.220   0.068   0.288 
R> system.time(DT[y==25])
   user  system elapsed 
  0.268   0.092   0.359
Run Code Online (Sandbox Code Playgroud)

r data.table

18
推荐指数
2
解决办法
3986
查看次数

标签 统计

data.table ×1

r ×1