を指定すると、そこにある項目をすばやくdata.table
サブセット化したいと思います。例えば:
dt = data.table(a=1:10, key="a")
dt[a > 3 & a <= 7]
これはまだかなり遅いです。個々の行を取得するために結合を実行できることは知っていますがdata.table
、この種の迅速なサブセットを取得するために並べ替えられていることを事実にする方法はありますか?
これは私がやっていることです:
dt1 = data.table(id = 1, ym = c(199001, 199006, 199009, 199012), last_ym = c(NA, 199001, 199006, 199009), v = 1:4, key=c("id", "ym"))
dt2 = data.table(id = 1, ym = c(199001, 199002, 199003, 199004, 199005, 199006, 199007, 199008, 199009, 199010, 199011, 199012), v2 = 1:12, key=c("id","ym"))
ごとid
に、ここでは 1 しかありません。 では、現在のと最後のの間の の値を合計ym
しdt1
たいと思います。つまり、inを返したいからです。これらは、現在の値以下のinの値です(前の ym を除く)。コード内:v2
ym
dt1
ym
dt1
ym == 199006
dt1
list(v2 = 2 + 3 + 4 + 5 + 6)
v2
dt2
ym
expr = expression({ #browser();
cur_id = id;
cur_ym = ym;
cur_dtb = dt2[J(cur_id)][ym <= cur_ym & ym > last_ym];
setkey(cur_dtb , ym);
list(r = sum(cur_dtb$v2))
})
dt1[,eval(expr ),by=list(id, ym)]