2016-12-30 84 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 

這不正是你想要得到什麼,但恕我直言範圍 - 您的樣本數據不對應於所需的輸出:)