我有一個矩陣,events
,其中包含500萬事件的發生次數。這500萬個事件中的每一個都有一個「類型」,範圍從1到2000.矩陣的一個非常簡化的版本如下。 「時間」的單位是1970年以來的秒數。所有事件都發生在2012年1月1日以後。更快速地計算5分鐘內發生的事件?
>events
type times
1 1352861760
1 1362377700
2 1365491820
2 1368216180
2 1362088800
2 1362377700
我試圖劃分時間,因爲1/1/2012到5分鐘的桶,然後填充這些桶的使用已經發生了多少i
類型的每個事件的每個桶中。我的代碼如下。請注意0是一個包含1-2000的每種可能類型的矢量,並且by
設置爲300,因爲這是5分鐘內的多少秒。
for(i in 1:length(types)){
local <- events[events$type==types[i],c("type", "times")]
assign(sprintf("a%d", i),table(cut(local$times, breaks=seq(range(events$times)[1],range(events$times)[2], by=300))))
}
這導致變量a1
通過a2000
其中包含如何i
類型的許多出現有在每個5分鐘的桶的行向量。
我開始然後找到「A1」和「A2000」之間的所有成對的相關性。
有沒有辦法來優化我上面提供的代碼塊?它運行得非常緩慢,但我想不出一種更快的方法。也許水桶太多,時間太少。
任何有識之士將不勝感激。
重複的例子:
>head(events)
type times
12 1308575460
12 1308676680
12 1308825420
12 1309152660
12 1309879140
25 1309946460
xevents <- xts(events[,"type"],.POSIXct(events[,"times"]))
ep <- endpoints(xevents, "minutes", 5)
counts <- period.apply(xevents, ep, tabulate, nbins=length(types))
>head(counts)
1 2 3 4 5 6 7 8 9 10 11 12 13 14
2011-06-20 09:11:00 0 0 0 0 0 0 0 0 0 0 0 1 0 0
2011-06-21 13:18:00 0 0 0 0 0 0 0 0 0 0 0 1 0 0
2011-06-23 06:37:00 0 0 0 0 0 0 0 0 0 0 0 1 0 0
2011-06-27 01:31:00 0 0 0 0 0 0 0 0 0 0 0 1 0 0
2011-07-05 11:19:00 0 0 0 0 0 0 0 0 0 0 0 1 0 0
2011-07-06 06:01:00 0 0 0 0 0 0 0 0 0 0 0 0 0 0
>> ep[1:20]
[1] 0 1 2 3 4 5 6 7 8 9 10 12 20 21 22 23 24 25 26 27
以上就是我一直在使用的代碼,但問題是,它沒有被5分鐘遞增的:它只是由真實事件的發生增加。
你的「可重現的例子」不是[reproducible](http://stackoverflow.com/q/5963269/271616),而且你不顯示你想要的輸出但是我認爲你需要每5分鐘進行一次觀察,無論你是否真的在那段時間內有數據。 –