2017-02-10 48 views
1

我在嘗試計算平均溫度10分鐘但24小時內向量時遇到了麻煩。平均間隔10分鐘的大型不規則間隔時間序列產生24小時配置文件

我有一個時間系列以正確的POSIX格式存儲在數據幀中。唯一的問題是數據不規則間隔(10±3分鐘)。

我知道如何平均他們在幾小時,幾天,幾個月的年份但我需要獲得24,72或168小時的檔案的平均值。

例如,對於168小時配置文件,我希望在每個星期一的觀察期間在00:00:00,然後在00:10:00,00:20:00等,然後每個星期二,星期三等。

所以我的數據平均值必須符合常規24/72/168向量。

對於24小時向量將像這樣被定義:

seq(ISOdatetime(2001,2,3,0,0,0), ISOdatetime(2001,2,4,0,0,0), by=(60*5)) 

在常規24小時矢量所得source of this solution here

[1] "2001-02-03 00:00:00 PST" "2001-02-03 00:05:00 PST" 
    [3] "2001-02-03 00:10:00 PST" "2001-02-03 00:15:00 PST" 
    [5] "2001-02-03 00:20:00 PST" "2001-02-03 00:25:00 PST" 
    [7] "2001-02-03 00:30:00 PST" "2001-02-03 00:35:00 PST" 
    [9] "2001-02-03 00:40:00 PST" "2001-02-03 00:45:00 PST" 

問題是我的數據的時間戳與每一天您移可以從下面的示例中看到。在2016-09-01首讀(應該是在00:00:00)是00:01:00,第二天是00:04:00,第二天00:07:00等等。

我試過xtszoo沒有成功,因爲聚合的限制是小時,我需要在幾分鐘內定義它

的多個答案我已經找到了對付通過不斷的數據集(example1平均時間序列,example2

可惜我找不到關於我的問題的答案。示例數據庫的

結構:

'data.frame': 9490 obs. of 2 variables: 
$ Date_Time_Stamp : POSIXct, format: "2016-09-01 00:01:00" "2016-09-01 00:11:00" "2016-09-01 00:22:00" "2016-09-01 00:32:00" ... 
$ Signal_Raw_Value: num 778 694 592 523 567 ... 

我的數據是這樣的(頭)尾

Date_Time_Stamp Signal_Raw_Value 
1 2016-09-01 00:01:00   777.51 
2 2016-09-01 00:11:00   694.38 
3 2016-09-01 00:22:00   591.69 
4 2016-09-01 00:32:00   523.23 
5 2016-09-01 00:42:00   567.24 
6 2016-09-01 00:52:00   547.68 

Date_Time_Stamp Signal_Raw_Value 
9485 2016-11-06 23:02:00   660.15 
9486 2016-11-06 23:12:00   635.70 
9487 2016-11-06 23:22:00   498.78 
9488 2016-11-06 23:32:00   415.65 
9489 2016-11-06 23:42:00   425.43 
9490 2016-11-06 23:53:00   440.10 

第一個小時2016年9月1日

Date_Time_Stamp Signal_Raw_Value 
1 2016-09-01 00:01:00   777.51 
2 2016-09-01 00:11:00   694.38 
3 2016-09-01 00:22:00   591.69 
4 2016-09-01 00:32:00   523.23 
5 2016-09-01 00:42:00   567.24 
6 2016-09-01 00:52:00   547.68 
7 2016-09-01 01:02:00   562.35 

第二天的第一個小時(2016年9月2日)

143 2016-09-02 00:04:00   557.46 
144 2016-09-02 00:14:00   557.46 
145 2016-09-02 00:24:00   562.35 
146 2016-09-02 00:35:00   552.57 
147 2016-09-02 00:45:00   503.67 
148 2016-09-02 00:55:00   484.11 
149 2016-09-02 01:05:00   454.77 

第三天行(2016年9月3日)

285 2016-09-03 00:07:00   655.26 
286 2016-09-03 00:17:00   537.90 
287 2016-09-03 00:27:00   464.55 
288 2016-09-03 00:38:00   454.77 
289 2016-09-03 00:48:00   425.43 
290 2016-09-03 00:58:00   420.54 
291 2016-09-03 01:08:00   400.98 

和第四日的前1小時:

426 2016-09-04 00:00:00   865.53 
427 2016-09-04 00:10:00   723.72 
428 2016-09-04 00:20:00   621.03 
429 2016-09-04 00:30:00   562.35 
430 2016-09-04 00:40:00   493.89 
431 2016-09-04 00:51:00   459.66 
432 2016-09-04 01:01:00   435.21 

處理信號的原始值後,我需要製作這樣的事情: 24 hrs profile和168小時:168 hrs profile

謝謝!

+0

解決此問題的一種方法是使用seq函數從數據的開始到結束創建一個10分鐘間隔的數組。使用新創建的數組的cut函數作爲break參數。現在你可以聚合,但新定義的切割值 – Dave2e

+0

我有一個部分成功與以下(優雅?)解決方案: 聚合(qxts,格式(索引(qxts),「%H」),平均值) 這產生每小時每小時平均值。我堅持改變間隔10或15分鐘。任何想法如何繼續前進? – Patryk

回答

0

既然你還在這個問題掙扎試試這個:

#Create sample data 
#create a sequence of random times (about 10 minutes apart) 
rtime <-as.integer(rnorm(1000, 10, 2)) 
Date_Time_Stamp<- as.POSIXct("2016-09-01") 
Date_Time_Stamp<-Date_Time_Stamp+cumsum(rtime)*60 
Signal_Raw_Value <- rnorm(1000, 600, 20) 
df<-data.frame(Date_Time_Stamp, Signal_Raw_Value) 
#End of sample data creation 

#Calclated the number of minutes since midnight 
df$minutes<-as.integer(format(df$Date_Time_Stamp, "%H"))*60 + as.integer(format(df$Date_Time_Stamp, "%M")) 
#break into 144 intervals per day 
df$mybreaks<-cut(df$minutes, breaks = seq(0, 1440, 10), include.lowest = TRUE) 

#Using dplyr 
library(dplyr) 
#find mean of each group 
summarise(group_by(df, mybreaks), mean(Signal_Raw_Value)) 
#find number of elements in each grouping 
summarise(group_by(df, mybreaks), n()) 

您的問題聲明也不是很清楚。這是一個解決方案,將一天的時間分成144個10分鐘(1440分鐘/天)段,並將整個數據集中的數據平均到144個間隔。

+0

非常感謝您的幫助。我已經測試了您的解決方案,但結果是我獲得了整個數據集的單個平均值。 – Patryk

+0

此外:在最後一個腳本中,我得到n()中的錯誤 - 不應該直接調用此函數。 我覺得問題是'mybreaks'的結構 - 它是因素,應該是日期格式。試圖解決它,但我得到的錯誤。將報告,如果我解決它。 – Patryk

+0

解決方案的一部分是我總結而不是summarise_。現在我得到了10分鐘的間隔值,但計算的平均值是恆定的,並且它沒有按照間隔對它進行分組 - 我獲得了884行的整個列表 - 應該是144分鐘的間隔。 – Patryk

相關問題