【问题标题】:Aggregating second-by-second sampling interval to 30 sec interval, POSIXct将逐秒采样间隔聚合为 30 秒间隔,POSIXct
【发布时间】:2016-12-30 08:53:32
【问题描述】:

[R]studio 新手,恭敬地请求帮助。

目标:我想以 1 秒的时间间隔收集数据,将其折叠为 30 秒的时间间隔,然后获得与之关联的每个变量的“平均值”。

这是我的数据的样子:

line    datetime         AA  BB  CC
1  2016-06-27 14:13:16    6  0  0.0
2  2016-06-27 14:13:17   10  0 48.6
3  2016-06-27 14:13:18    7  0 52.0
4  2016-06-27 14:13:19   13  0 54.4
5  2016-06-27 14:13:20   16  0 60.8
6  2016-06-27 14:13:21    6  0 65.5
7  2016-06-27 14:13:22    6  0 47.5
8  2016-06-27 14:13:23    6  1 46.8
9  2016-06-27 14:13:24    4  1 55.5
10 2016-06-27 14:13:25    4  1 51.1
11 2016-06-27 14:13:26    4  1 53.4

我想看到的是:

line    datetime        AA  BB  CC
1   2016-06-27 14:13:16 18  1 50.5
2   2016-06-27 14:13:46 19  1 52.8

(这里,变量 AA、BB 和 CC 是平均的)。

有类似的问题,但没有一个足够相似,可以让我用我的一点编码和编程知识打下基础。我一直在可能的基本 r 解决方案和可能的包解决方案之间来回踱步,但无济于事;主要是因为语言/语法实现对我来说还是有点陌生​​。

【问题讨论】:

  • 你试过答案了吗?成功了吗?

标签: aggregate rstudio intervals posixct


【解决方案1】:

我想你想试试这个:(基本解决方案)

etw
              datetime AA BB   CC
1  2016-06-27 14:13:16  6  0  0.0
2  2016-06-27 14:13:17 10  0 48.6
3  2016-06-27 14:13:18  7  0 52.0
4  2016-06-27 14:13:19 13  0 54.4
5  2016-06-27 14:13:20 16  0 60.8
6  2016-06-27 14:13:21  6  0 65.5
7  2016-06-27 14:13:22  6  0 47.5
8  2016-06-27 14:13:23  6  1 46.8
9  2016-06-27 14:13:24  4  1 55.5
10 2016-06-27 14:13:25  4  1 51.1
11 2016-06-27 14:13:26  4  1 53.4

aggregate(x = etw, by = list(cut(etw$datetime,breaks = "10 sec")), FUN=mean )

              Group.1            datetime  AA  BB    CC
1 2016-06-27 14:13:16 2016-06-27 14:13:20 7.8 0.3 48.22
2 2016-06-27 14:13:26 2016-06-27 14:13:26 4.0 1.0 53.40

您可以将 10 秒部分更改为 30 秒。但是 - 请注意:breaks = "10 sec" 将从最短时间开始将范围切割成 10 秒切片。在您的情况下,这会导致单个切片。

您也可以使用手动定义范围

breaks = seq.POSIXt(from = as.POSIXct("2016-06-27 14:13:00"),to = as.POSIXct("2016-06-27 14:14:00"),by="10 sec"))

aggregate(x = etw,FUN=mean, by = list(cut(etw$datetime,breaks = seq.POSIXt(from =  as.POSIXct("2016-06-27 14:13:00"),to =  as.POSIXct("2016-06-27 14:14:00"),by="10 sec"))) )
              Group.1            datetime       AA        BB       CC
1 2016-06-27 14:13:10 2016-06-27 14:13:17 9.000000 0.0000000 38.75000
2 2016-06-27 14:13:20 2016-06-27 14:13:23 6.571429 0.5714286 54.37143 

这不是您想要得到的,但恕我直言 - 您的示例数据与所需的输出不对应 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-06
    • 1970-01-01
    • 2021-07-03
    • 1970-01-01
    • 1970-01-01
    • 2015-06-07
    • 2020-10-16
    • 2022-01-18
    相关资源
    最近更新 更多