2012-04-27 9 views
0

セッション開始と終了時刻の間の秒を15分間隔に分割する最も効率的な方法を見つけようとしています。それぞれに秒と複数のビットレートを表示できます間隔。値を割り当てる間隔のシーケンスを作成する方法

df <- structure(list(username = structure(c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 9L), .Label = c("user1", "user2", "user3", "user4", "user5", "user6", "user7", "user8", "user9"), class = "factor"), bitrate = structure(c(3500000, 7000000, 3500000, 3500000, 3500000, 7000000, 3500000, 7000000, 3500000, 7000000), class = "numeric"), start = structure(c(1322700567, 1322700984, 1322700646, 1322700883, 1322700042, 1322700073, 1322700547, 1322700794, 1322700694, 1322700934), tzone = "", class = c("POSIXct", "POSIXt")), end = structure(c(1322700766, 1322701250, 1322700945, 1322701270, 1322701284, 1322706303, 1322701781, 1322702307, 1322701600, 1322701224), tzone = "", class = c("POSIXct", "POSIXt"))), .Names = c("username", "birate", "start", "end"), row.names = c(NA, 10L), class = "data.frame")

 username birate    start     end 
1  user1 3500000 2011-12-01 01:49:27 2011-12-01 01:52:46 
2  user2 7000000 2011-12-01 01:56:24 2011-12-01 02:00:50 
3  user3 3500000 2011-12-01 01:50:46 2011-12-01 01:55:45 
4  user4 3500000 2011-12-01 01:54:43 2011-12-01 02:01:10 
5  user5 3500000 2011-12-01 01:40:42 2011-12-01 02:01:24 
6  user6 7000000 2011-12-01 01:41:13 2011-12-01 03:25:03 
7  user7 3500000 2011-12-01 01:49:07 2011-12-01 02:09:41 
8  user8 7000000 2011-12-01 01:53:14 2011-12-01 02:18:27 
9  user9 3500000 2011-12-01 01:51:34 2011-12-01 02:06:40 
10 user9 7000000 2011-12-01 01:55:34 2011-12-01 02:00:24 

>

は、理想的には、私は、どちらか一方のみを示すと、1暦日のためにする必要があり、可能であればRにこれをしたい:ここでは

は、いくつかのサンプルデータであり、ベクトルの秒数、またはビットレートベクトルを秒数の倍数として割り当てることができます。たとえば、秒を使用します。

session 01:30 01:45 02:00 02:15 02:30 etc. 
    1  0  199  0  0  0 etc. 
    2  0  266  0  0  0 etc. 
    10  0  306  24  0  0 etc. 

私は分単位のシーケンスか、おそらくはアライメントタイム付きのxtsを使用するのが最善の方法かもしれません。

+0

「時計」の開始位置を教えてください。私は 'start'時間と' 01:00'の値との間に何の関係も見ません –

+0

これは関係するものではなく、目的の出力がどのようなものかの例です。私は戻って編集し、例の出力が上になるように編集します。ありがとうございました – Sam35

+0

出力例を並べるために訂正しました。 – Sam35

答えて

1

私はこのコードがあなたがしたいこととはまったく確かではありませんが、あなたが望む方向にあなたを動かすのに役立つことを願っています。

fun <- function(i, d) { 
    idx <- seq(d$start[i],d$end[i],1) # create sequence for index 
    dat <- rep(d$birate[i],length(idx)) # create data over sequence 
    xts(dat, idx, dimnames=list(NULL,d$username[i])) # xts object 
} 

# loop over each row and put each row into its own xts object 
xl <- lapply(1:NROW(df), fun, d=df) 
# merge all the xts objects 
xx <- do.call(merge, xl) 
# apply a function (e.g. colMeans) to each 15-minute period 
xa <- period.apply(xx, endpoints(xx, 'minutes', 15), colMeans, na.rm=TRUE) 
+0

これは私が非常に多くのジョシュアに感謝のために探していたものでした...私が作った唯一の変更は、間隔で比例ビットレートを取得し、xaをそれをdfに戻してください...私はまだそれが何百万行を超えるかを見ていません。 – Sam35