2016-12-30 83 views
-1

[R]工作室的新手和恭敬地请求帮助。按秒采样间隔聚合到30秒的间隔,POSIXct

目标:我想以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的平均值)。

有类似的问题,但没有足够的相似性,给我一个基础,我的小编码和编程知识。我一直在可能的基础解决方案和可能的解决方案之间来回奔波,无济于事。主要是因为语言/语法的实现对我来说还是有点陌生​​。

+0

你试过了吗?它工作? –

回答

0

我想你想试试这个:(基本溶液)

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秒。然而 - 保重:休息=“10秒”将从最短时间开始将范围切割成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 

这不正是你想要得到什么,但恕我直言范围 - 您的样本数据不对应于所需的输出:)