使用密钥连续子集R data.table(最快的方式)

时间:2018-01-04 16:49:31

标签: r performance data.table

我从一个带有两列的data.table开始,并希望连续应用标准来过滤掉观察结果。有些标准在计算上很麻烦,所以我想最后应用这些标准(当数据集已经减少时)。

我认为这是data.table应该处理得比数据框架好得多的东西。但是我使用data.table的解决方案并不比使用data.frame更有效。 有没有办法让它更快?

实施例

library(data.table)
#fake data
df<-data.frame(id=1:1000000,content=round(runif(1000000)*3))
dt<-as.data.table(df,key=id)

for (i in 1:1000000) {
  #datatable version (memory intensive and slow)  
  preselection_dt = dt[id>i]
  some1<-preselection_dt[3==content  , which=TRUE]

  #dataframe version, saves only indices and is fast
  preselection_df = df$id>i
  some2<-which(3==df$content[preselection_df])
}

(假设3==content是计算密集型的东西,所以我只会通过计算这个来获得很多东西,但这只是第一个条件为真的观察结果。

我无法找到有效使用data.table-keys并产生正确结果的解决方案。

0 个答案:

没有答案