使用window()子集大型动物园对象会减少次数

时间:2016-01-05 15:32:19

标签: r zoo

序言:我有一个大的多变量动物园对象。它包含几年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

我正在研磨我的齿轮,因为我可以在其他年份重现它。感谢您的任何见解!

1 个答案:

答案 0 :(得分:1)

因此,事实证明,在函数window()中,如果未指定,startend变量将继承系统的时区。由于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!!!!

C'est la vie ...