2016-01-05 24 views
0

前導碼:我有一個大的多變量動物園對象。它包含幾年60分鐘的間隔數據。我喜歡將我的數據保存在大塊中,因爲我需要執行工作。通常情況下,我只是在製作圖表等基本的東西,但我希望更深入地理解我的數據。使用窗口()刪除大型動物園對象的時間下降時間

所以。我正在使用我的大型data.csv文件here。並執行以下操作:

library(zoo) 
library(lubridate) 
df <- read.csv(file.choose(), na.strings = "") 
df$FLOW <- as.numeric(df$FLOW) # read.csv turns this row into a factor due to NAs. 
df$NST_DATI <- mdy_hm(df$NST_DATI, tz = "UTC") 
df.zoo <- read.zoo(df) 

說我想從2012年這個子集大塊只有數據如果我子集DF data.table我得到這個(請注意倍2012-01-01 00開始:30:00,如預期):

> head(df[format(df$NST_DATI, "%Y") == 2012, ]) 
       NST_DATI WATER_TEMP PH SPEC_CONDUCT DO PER_SATUR TURBIDITY TDS STAGE FLOW 
35065 2012-01-01 00:30:00  0.82 6.48   40.3 13.24  92.5  2.6 0.0258 83.315 587 
35066 2012-01-01 01:30:00  0.83 6.48   40.2 13.17  92.1  3.2 0.0257 83.313 585 
35067 2012-01-01 02:30:00  0.85 6.44   40.1 13.11  91.8  3.8 0.0256 83.313 585 
35068 2012-01-01 03:30:00  0.84 6.48   40.2 13.14  91.9  2.9 0.0257 83.313 585 
35069 2012-01-01 04:30:00  0.86 6.48   40.2 13.10  91.7  2.9 0.0257 83.313 585 
35070 2012-01-01 05:30:00  0.87 6.48   40.2 13.08  91.5  2.9 0.0257 83.312 583 

當我子集使用window()功能,我得到不同的結果(注意倍2012-01-01 03:30:00開始)。

head(window(df.zoo, start = "2012-01-01", end = "2012-12-31")) 
        WATER_TEMP PH SPEC_CONDUCT DO PER_SATUR TURBIDITY TDS STAGE FLOW 
2012-01-01 03:30:00  0.84 6.48   40.2 13.14  91.9  2.9 0.0257 83.313 585 
2012-01-01 04:30:00  0.86 6.48   40.2 13.10  91.7  2.9 0.0257 83.313 585 
2012-01-01 05:30:00  0.87 6.48   40.2 13.08  91.5  2.9 0.0257 83.312 583 
2012-01-01 06:30:00  0.90 6.48   40.3 13.09  91.7  2.9 0.0258 83.312 583 
2012-01-01 07:30:00  0.94 6.49   40.3 13.01  91.3  2.9 0.0258 83.313 585 
2012-01-01 08:30:00  0.95 6.46   41.3 12.98  91.1  2.8 0.0264 83.316 588 

這真的磨我的齒輪,因爲我可以重現它的其他年份。感謝您的任何見解!

+0

請把這重複性使任何人都可以將其粘貼到會議,並觀察它。通過使用'dput(...)顯示輸入來做到這一點' –

+0

csv鏈接到上面的Dropbox。它非常大......我因好奇而丟棄了數據,它是一個4.5 MB的文件,並在粘貼時壓縮瀏覽器。 –

+0

SO的帖子應該包含* minimal *數據。在充分展示基本問題的同時,充分展現它。 –

回答

1

因此,事實證明,在函數window()中,如果未指定,則變量將繼承系統的時區。由於df.zoo被指定爲tz = "UTC"我的計算機的時區已加入並強制三小時的偏移量偏移量(UTC減去我的時區)。

要獲得期望的結果,解決的辦法是:

window(df.zoo, start = as.POSIXct("2012-01-01", tz = "UTC"), end = as.POSIXct("2012-12-31", tz = "UTC")) # specify tz!!!! 

這就是生活......

+2

請注意,動物園不知道任何關於POSIXct或任何其他索引類。這給了它很大的普遍性,但它不能處理特定類的特質,所以需要明確。如果你使用chron,那麼沒有時區來處理,這種問題不會發生。 –

相關問題