概述我比較熟悉data.table,沒那么多dplyr..我讀過一些dplyr小插曲一些例子出現了,到目前為止,我的結論是:data.table和dplyr在速度上具有可比性,除非有許多(即>10-100 K)組,而且在其他一些情況下(見下面的基準)dplyr具有更易訪問的語法dplyr抽象(或將)潛在的DB交互有一些細微的功能差異(參見下面的“示例/使用”)在我的心目中,2.沒有多大的負擔,因為我對它相當熟悉data.table雖然我理解對于這兩個新用戶來說,這將是一個很大的因素。我想避免爭論哪個更直觀,因為這與我從一個已經熟悉的人的角度提出的具體問題無關。data.table..我還想避免討論“更直觀”如何導致更快的分析(當然是正確的,但也不是我最感興趣的)。問題我想知道的是:對于熟悉包的人來說,是否有更容易用一個或另一個包進行編碼的分析任務(例如,所需擊鍵的一些組合與所需級別的暗喻,其中每一個都較少是一件好事)。是否有分析任務在一個包中比另一個包中執行得更有效(即超過2倍)。一最近的問題讓我更多地思考這件事,因為在那之前我沒有想到dplyr會提供超出我所能做的data.table..這是dplyr解決方案(Q結束時的數據):dat %.%
group_by(name, job) %.%
filter(job != "Boss" | year == min(year)) %.%
mutate(cumu_job2 = cumsum(job2))比我的黑客攻擊要好得多data.table解決辦法。盡管如此,很好data.table解決方案也很好(謝謝Jean-Robert,Arun,注意,我喜歡單一的聲明,而不是嚴格的最優解決方案):setDT(dat)[,
.SD[job != "Boss" | year == min(year)][, cumjob := cumsum(job2)],
by=list(id, job)]后者的語法看起來非常深奧,但如果您習慣了,它實際上是非常簡單的。data.table(即不使用一些更深奧的技巧)。理想情況下,我想看到的是一些好的例子dplyr或data.table方法實質上更簡潔,或者表現得更好。實例使用dplyr不允許返回任意行數的分組操作(從埃德迪問題,注意:看起來它將在Dplyr 0.5同時,@初學者展示了一種潛在的解決辦法-使用do在回答@Eddi的問題時)。data.table支座滾動連接(謝謝@dholstius)重疊聯接data.table內部優化窗體的表達式。DT[col == value]或DT[col %in% values]為速度貫通自動標引用二進制搜索同時使用相同的基R語法??催@里更多的細節和一個小小的基準。dplyr提供功能的標準評估版本(例如:regroup, summarize_each_),這可以簡化dplyr(注:按方案使用data.table是絕對有可能的,只是需要一些仔細的思考,替換/引用,等等,至少據我所知)基準我跑了我自己的基準并發現這兩個包在“拆分應用合并”風格分析中是可比較的,除非在有大量組(>100 K)的情況下。data.table變得更快。@Arun聯接基準,表明data.table比例尺dplyr隨著組數的增加(在包和最近版本的R中都更新了最近的增強)。同時,在嘗試獲取唯一價值有data.table~6倍快。(未經核實)data.table在更大版本的組/應用/排序時,速度提高了75%dplyr比小的快40%從評論中提出的另一個這樣的問題,謝謝丹納斯)。馬特,主要作者data.table,有的基準分組操作data.table, dplyr巨蟒pandas最多20億行(內存中~100 GB).阿80K組的舊基準有data.table~8倍快
- 0 回答
- 0 關注
- 721 瀏覽
添加回答
舉報
0/150
提交
取消