2

2列のデータフレームがあります

        time     x
  1306247226     5
  1306247236    10
  1306248127    20
  1306248187    36
  1306249248    28
  1306249258    24
  1306249259    20
  ...

「時間」列の値が十分に近い行を集計し (たとえば、差が 60 未満であるとしましょう)、集計された行の「x」値を合計したいと思います。集計された行の時間値は、集計の最初の行の値になります。('time' は UNIX タイムスタンプです)

目標は、この例の出力として持つことです:

        time     x
  1306247226    15
  1306248127    20
  1306248187    36
  1306249248    72
  ...

データセットは非常に大きく、「for」ループには長い時間がかかります...しかし、それが唯一のオプションである場合は、処理して待つことができます。何か案が?

どうもありがとう!

4

1 に答える 1

4

次のようなものを使用できます。

まず、集計用の新しい列を作成します

dat$gg <- cumsum(c(0,diff(dat$time)) > 60)

次に、plyrパッケージを使用して関数集計を適用します

library(plyr)
ddply(dat,.(gg),summarise,time = head(time,1),res = sum(x))
  gg       time res
1  0 1306247226  15
2  1 1306248127  56
3  2 1306249248  72

コメント後に編集

Op では、60 を超えないように 60 のしきい値が必要でし>た。>=

dat$gg <- cumsum(c(0,diff(dat$time)) >= 60)

ddply(dat,.(gg),summarise,time = head(time,1),res = sum(x))
  gg       time res
1  0 1306247226  15
2  1 1306248127  20
3  2 1306248187  36
4  3 1306249248  72
于 2013-01-09T08:52:59.157 に答える