簡體   English   中英

在R data.table中鏈接時設置鍵

[英]Setting key while chaining in R data.table

想象一下,我有一個data.table DT ,其中包含a, b, c列。 我想基於a過濾行(比如,只選擇那些值為"A" ),用c計算b的總和。 我可以有效地做到這一點,使用二進制搜索進行過濾

setkey(DT, a)
DT[.("A"), .(sum.B = sum(B)), by = .(C)]

如果那時我想根據新獲得的sum.b的值過濾行sum.b辦? 如果我想保留sum.b等於c(3, 4, 5) ,我可以這樣說

DT[.("A"), .(sum.B = sum(B)), by = .(C)][sum.b %in% c(3, 4, 5)]

但后一種操作使用慢速矢量掃描。 有沒有辦法在鏈接時“動態”設置鍵? 理想情況下我會

DT[.("A"), .(sum.B = sum(B)), by = .(C)][??set sum.b as key??][.(c(3, 4, 5))]

我不知道中間步驟。

您在問題中提出的中間步驟如下:

# unnamed args
DT[,.SD,,sum.b]
# named args
DT[j = .SD, keyby = sum.b]
# semi named
DT[, .SD, keyby = sum.b]

然而,您應該對數據進行基准測試,因為它可能比矢量掃描慢,因為您需要setkey。

看起來eddi已經在評論中提供了該解決方案。 他提到的FR是data.table#1105

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM