为什么将新系列添加到动物园对象时会删除时区属性
Why does the time zone attribute get dropped when I add a new series to a zoo object
当我向它添加新的时间序列时,我的动物园对象的时区属性被删除。
例如,
library(zoo)
ZooObject=zoo(data.frame(a=1:5),
seq(as.POSIXct("2014-01-01 00:00:01",tz="UTC"),
as.POSIXct("2014-01-01 00:00:05",tz="UTC"),
by=1)
)
attr(time(ZooObject),'tzone')
#"UTC"
ZooObject$b <- 2
attr(time(ZooObject),'tzone')
#NULL
创建 zoo 对象后正确报告了时区属性,但在添加第二个系列后时区消失了(默认为语言环境)。
这给我带来了麻烦,因为我后来将每小时的数据汇总为每天的数据,因此保留正确的时区很重要。
我的解决方案是不断重新设置时区属性。
attr(time(ZooObject),'tzone') <- "UTC"
这类似于merge.zoo removes time zone
有没有办法阻止时区被剥离?
避免这种行为的一个简单方法是使用 xts 而不是 zoo。如果需要,您可以在进行所需的转换后将对象重新分类为动物园。
library(xts)
library(zoo)
ZooObject=zoo(data.frame(a=1:5),
seq(as.POSIXct("2014-01-01 00:00:01",tz="UTC"),
as.POSIXct("2014-01-01 00:00:05",tz="UTC"),
by=1)
)
test <- as.xts(ZooObject)
attr(time(test), 'tzone')
#> [1] "UTC"
test$b <- 2
attr(time(test), 'tzone')
#> [1] "UTC"
test2 <- as.zoo(test)
attr(time(test2), 'tzone')
#> [1] "UTC"
当我向它添加新的时间序列时,我的动物园对象的时区属性被删除。 例如,
library(zoo)
ZooObject=zoo(data.frame(a=1:5),
seq(as.POSIXct("2014-01-01 00:00:01",tz="UTC"),
as.POSIXct("2014-01-01 00:00:05",tz="UTC"),
by=1)
)
attr(time(ZooObject),'tzone')
#"UTC"
ZooObject$b <- 2
attr(time(ZooObject),'tzone')
#NULL
创建 zoo 对象后正确报告了时区属性,但在添加第二个系列后时区消失了(默认为语言环境)。
这给我带来了麻烦,因为我后来将每小时的数据汇总为每天的数据,因此保留正确的时区很重要。 我的解决方案是不断重新设置时区属性。
attr(time(ZooObject),'tzone') <- "UTC"
这类似于merge.zoo removes time zone
有没有办法阻止时区被剥离?
避免这种行为的一个简单方法是使用 xts 而不是 zoo。如果需要,您可以在进行所需的转换后将对象重新分类为动物园。
library(xts)
library(zoo)
ZooObject=zoo(data.frame(a=1:5),
seq(as.POSIXct("2014-01-01 00:00:01",tz="UTC"),
as.POSIXct("2014-01-01 00:00:05",tz="UTC"),
by=1)
)
test <- as.xts(ZooObject)
attr(time(test), 'tzone')
#> [1] "UTC"
test$b <- 2
attr(time(test), 'tzone')
#> [1] "UTC"
test2 <- as.zoo(test)
attr(time(test2), 'tzone')
#> [1] "UTC"