是什麼處理等řdata.frame流數據前處理聚合時間統計
> df <- data.frame(amount=c(4,3,1,1,4,5,9,13,1,1), size=c(164,124,131,315,1128,331,1135,13589,164,68), tot=1, first=c(1,1,3,3,2,2,2,2,4,4), secs=c(2,2,0,0,1,1,1,1,0,0))
> df
amount size tot first secs
1 4 164 1 1 2
2 3 124 1 1 2
3 1 131 1 3 0
4 1 315 1 3 0
5 4 1128 1 2 1
6 5 331 1 2 1
7 9 1135 1 2 1
8 13 13589 1 2 1
9 1 164 1 4 0
10 1 68 1 4 0
流data.frame到每時間彙總數據的最有效方式
> df2
time tot amount size
1 1 2 3.5 144
2 2 6 34.5 16327
3 3 8 36.5 16773
4 4 2 2.0 232
..使用R,當實際的數據集可以超過1億行甚至數十千兆字節?
列first
表示持續時間爲secs
的流程開始,其度量標準爲amount
,size
和tot
。在合計合計中,size
和amount
以雙精度均分到時間範圍,而tot
以整數形式求和到每個時隙。持續時間secs
表示流量除了數值first
之外還有多少個時隙:如果secs
爲1並且first
爲5,則該流持續時隙5和6.我當前的實現使用醜陋和死 - 慢循環,其中是不是一個選項:你可能可以優化這個很多,並使用循環獲得良好的性能,但我敢打賭,有更好的算法存在。也許你能在某種程度上expand/duplicate與secs > 0
行,同時增加了擴展行first
(時間戳)值和動態調整amount
,size
,並且tot
指標:
now original data..
amount size tot first secs
1 4 164 1 1 0
2 4 164 1 1 1
3 3 124 1 1 2
magically becomes
amount size tot first
1 4 164 1 1
2 2 82 1 1
3 2 82 1 2
4 1 41.33 1 1
5 1 41.33 1 2
6 1 41.33 1 3
這個預處理步驟聚合後會使用plyr ddply當然以高效的並行模式是微不足道的。
所有示例ddply,apply等函數示例我能夠在每行或每列的基礎上找到操作,因此很難修改其他行。希望我不必依賴awk-magic。
更新:當擴展按「原樣」完成時,上述算法可能會很容易耗盡您的內存。因此某些「即時」計算是首選,我們不會將所有內容映射到內存。然而,Mattrition的答案是正確的,並且有很大幫助,因此將其標記爲已接受的答案。
您需要用簡單的術語來解釋如何從輸入到問題中顯示的輸出。 – Roland
您當前的實現也有一些語法和其他錯誤。事實上,它不會產生任何輸出。我什至不能看到它會如何產生你的建議輸出,因爲你從來沒有分配任何東西到一個名爲「時間」的列。 – MattLBeck
是的。添加了簡要說明和「時間」分配。 – ylijumala