如何快速将数据框中的时间列分组为间隔?

Posted

技术标签:

【中文标题】如何快速将数据框中的时间列分组为间隔?【英文标题】:How do I quickly group the time column in a dataframe into intervals? 【发布时间】:2011-02-24 19:17:03 【问题描述】:

假设在 R 中,我有一个 data.frame,第一列代表时间(作为 POSIXct)。其余列(例如,第 2 列)是数字数据。

我想将时间分成 3 分钟的间隔。每个区间都是属于该特定区间的值的平均值。

现在,我有一个循环遍历时间列并动态生成时间间隔。我想知道是否有更优雅的方式来完成同样的事情?

提前致谢。

德里克

【问题讨论】:

类似问题***.com/questions/2441136/… 【参考方案1】:

我认为像下面这样的命令会返回一个包含 3 分钟间隔的值的列表。 (v 是数据框的名称,datecol 是日期列的名称)

library(plyr)

v<-data.frame(datecol=as.POSIXct(c(
  "2010-01-13 03:02:38 UTC",
  "2010-01-13 03:03:14 UTC",
  "2010-01-13 03:05:52 UTC",
  "2010-01-13 03:07:42 UTC",
  "2010-01-13 03:09:38 UTC",
  "2010-01-13 03:10:14 UTC",
  "2010-01-13 03:12:52 UTC",
  "2010-01-13 03:13:42 UTC",
  "2010-01-13 03:15:42 UTC",
  "2010-01-13 03:16:38 UTC",
  "2010-01-13 03:18:14 UTC",
  "2010-01-13 03:21:52 UTC",
  "2010-01-13 03:22:42 UTC",
  "2010-01-13 03:24:19 UTC",
  "2010-01-13 03:25:19 UTC"
)), x = cumsum(runif(15)*10),y=cumsum(runif(15)*20))


dlply(v,.(cut(datecol,"3 min")),"[")

【讨论】:

您确定可以在 POSIXct 类型上执行 cut() 吗?我在尝试这个时遇到了错误。 @Dirk Eddelbuettel:我进行了编辑以包含我正在测试的数据框【参考方案2】:

zoo 和 xts 包在这方面表现出色,并且拥有丰富的文档。这是预装的to.minutes3,但我也使用aggregate.zoo() 和自定义函数手动执行相同操作:

> library(xts)
> x <- xts(cumsum(abs(rnorm(20))), Sys.time()+60*(0:19))
> x
                       [,1]
2010-05-27 14:44:25  1.2870
2010-05-27 14:45:25  3.3187
2010-05-27 14:46:25  4.0976
2010-05-27 14:47:25  5.3304
2010-05-27 14:48:25  6.9415
2010-05-27 14:49:25  7.4508
2010-05-27 14:50:25  8.5281
2010-05-27 14:51:25  8.7145
2010-05-27 14:52:25  9.0120
2010-05-27 14:53:25 10.5063
2010-05-27 14:54:25 11.6312
2010-05-27 14:55:25 11.9813
2010-05-27 14:56:25 13.8883
2010-05-27 14:57:25 14.1696
2010-05-27 14:58:25 14.3269
2010-05-27 14:59:25 14.6768
2010-05-27 15:00:25 15.4926
2010-05-27 15:01:25 16.8408
2010-05-27 15:02:25 18.7739
2010-05-27 15:03:25 19.7815
> to.minutes3(x)
                     x.Open  x.High   x.Low x.Close
2010-05-27 14:44:25  1.2870  1.2870  1.2870  1.2870
2010-05-27 14:47:25  3.3187  5.3304  3.3187  5.3304
2010-05-27 14:50:25  6.9415  8.5281  6.9415  8.5281
2010-05-27 14:53:25  8.7145 10.5063  8.7145 10.5063
2010-05-27 14:56:25 11.6312 13.8883 11.6312 13.8883
2010-05-27 14:59:25 14.1696 14.6768 14.1696 14.6768
2010-05-27 15:02:25 15.4926 18.7739 15.4926 18.7739
2010-05-27 15:03:25 19.7815 19.7815 19.7815 19.7815
> 

【讨论】:

以上是关于如何快速将数据框中的时间列分组为间隔?的主要内容,如果未能解决你的问题,请参考以下文章

根据熊猫数据框中的列标签对数据进行分组

如何将时间列分别分组为 5 分钟间隔和最大值/最小值 SQL?

将行值转换为火花数据框中的列数组

如何将数据框中的多个“字符串”列转换为日期时间列?

对数据框中的一列求和并将结果返回为 int

使用 pyspark 数据框中的复制名称加入后使用左表中的所有列进行分组