我有一个矩阵,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分钟进行一次观察,无论你是否真的在那段时间内有数据。 –