[英]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.