3
在數據表計數以前行
(道歉,如果這裏的一些術語的關閉 - 我來自一個SQL後臺,我纔剛剛進入將R世界)基於日期
我有一個數據錶帶有一系列按日期排序的條目。數據表中的一個字段是分組值,一個是時間值。 隨着數據排序(或鍵入 - 我是R新手,但仍然不能確定其中的差異),那麼我希望計算每行的這個組中多少行如何排在當前行的前面(包括在給定的時間範圍內。
這裏是我想要做的,使用火炬松數據集一個簡單的例子:
躍躍欲試示例數據:
library(lubridate)
library(zoo)
library(data.table)
DT = as.data.table(Loblolly)
DT[,rd := Sys.time() + years(age)]
setkey(DT,Seed,rd)
現在我們必須通過種子排序數據表(組)和rd(我的日期欄)。我有將產生我的計數值(CT)的基礎上爲10年的時間間隔中的溶液:
DT[,.ct:=mapply(function(x,y) DT[(rd>x-years(10) & rd<=x &Seed==y),.N],DT$rd,DT$Seed)]
這產生所希望的結果在這個例子中數據集:
height age Seed rd ct
1: 3.93 3 329 2019-03-01 13:38:00 1
2: 9.34 5 329 2021-03-01 13:38:00 2
3: 26.08 10 329 2026-03-01 13:38:00 3
4: 37.79 15 329 2031-03-01 13:38:00 2
5: 48.31 20 329 2036-03-01 13:38:00 2
6: 56.43 25 329 2041-03-01 13:38:00 2
7: 4.12 3 327 2019-03-01 13:38:00 1
8: 9.92 5 327 2021-03-01 13:38:00 2
9: 26.54 10 327 2026-03-01 13:38:00 3
10: 37.82 15 327 2031-03-01 13:38:00 2
...
...
然而,我需要將這個規模擴大到大約10,000個團隊的500萬條記錄,並且在那裏運行需要很長的時間。有沒有更快,更笨拙的方法來做我想做的事情?
這出色的作品約100,000行,但是在1萬元及以上的內存使用氣球較快(工作集爲14GB) - 我認爲,因爲R爲foverlaps中創建一個非常大的中間數據結構。 有沒有一種方法可以避免這種情況?是否有可能以某種方式循環組? – TimBrown
是的,我很害怕這個......這是因爲我完全加入了。我想這個解決方案你需要一個大內存,或者等待別人有更好的解決方案。 –