나는 500 만개의 이벤트 발생 시간을 포함하는 행렬 events
을 가지고 있습니다. 이 500 만개의 이벤트는 각각 1에서 2000 사이의 "유형"을 가지고 있습니다. 매트릭스의 매우 단순화 된 버전은 아래와 같습니다. '시간'의 단위는 1970 년 이후 초입니다. 모든 이벤트는 2012 년 1 월 1 일 이후에 발생했습니다. 5 분 간격으로 발생 횟수를 빠르게 계산할 수 있습니까?
>events
type times
1 1352861760
1 1362377700
2 1365491820
2 1368216180
2 1362088800
2 1362377700
나는 5 분 버킷으로 2012 년 1 월 이후의 시간을 분할 한 후 각 버킷에 발생 방법 유형
i
의 각 이벤트의 많은 이러한 각각의 버킷을 채우기 위해 노력하고 있어요. 내 코드는 아래와 같습니다.
types
은 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))))
}
이 변수를 5 분 버킷 각각이 얼마나 많이 발생 형 i
의 행 벡터를 포함 a2000
통해 a1
초래한다.
나는 'a1'과 'a2000'사이의 모든 pairwise 상관 관계를 찾습니다.
위에서 제공 한 코드 청크를 최적화 할 수있는 방법이 있습니까? 그것은 매우 느리게 실행되지만, 나는 그것을 더 빨리 만드는 방법을 생각할 수 없다. 아마도 너무 많은 버킷과 너무 적은 시간이있을 것입니다.
모든 통찰력을 주시면 감사하겠습니다.
재현 예 : 위
>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 분으로 증가하지 않았 음이다 : 그것은 단지 실제 사건의 발생에 의해 증가시킨다.
"재생산 가능한 예제"(http://stackoverflow.com/q/5963269/271616)는 출력물을 원하는대로 표시하지 않습니다. 그렇지만 실제로는 해당 간격에 데이터가 있는지 여부에 관계없이 5 분마다 관찰 할 때 행을 원한다고 가정합니다. –