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 回答