0

私は到着プロセスのデータを持っており、それをカウントプロセスに変換したいと考えています。これは私がしたことです:

# inter-arrival time in milliseconds
x <- rpareto(100000, location = 10, shape = 1.2)
# arrival time in milliseconds
x.cumsum <- cumsum(x)
# the last arrival
x.max <- max(x.cumsum)
# the time scale for the count data, in this case 1 second
kTimeScale <- 1000

count.length <- ceiling(x.max / kTimeScale)

counts <- rep(0, times = count.length)

for (i in x.cumsum) {
  counts[round(i / kTimeScale)] <- counts[round(i / kTimeScale)] + 1
}

これは機能しますが、非常に大きなデータセット (数百万は遅い) の場合です。これを行うためのより良い高速な方法があるかどうか疑問に思っていましたか?

4

1 に答える 1

1

あなたはこれを行うことができますtable

countsTable<-table(round(x.cumsum/kTimeScale))
counts[1:10]
##  [1] 24 41  1  2 33 26 20 45 36 19
countsTable[1:10]
## 
##  0  1  2  3  4  5  6  7  8  9 
##  5 24 41  1  2 33 26 20 45 36 

違いは、関数が 0 の値を欠いていることです。このtable関数は、観測値がない値に 0 を入力しませんが、次のようにして修正できます。

counts2<-rep(0,length(counts)+1)
counts2[as.integer(names(countsTable))+1]<-countsTable
identical(counts,counts2[-1])    
## [1] TRUE
于 2013-10-17T20:52:20.833 に答える