我想增加具有变量的动物园对象,可以用来测试一个月更改。我敢肯定,还有更多一般的方法可以做到这一点。建议会很棒,但是我想理解为什么这种简单的方法失败了。如果我理解我在这里缺少的东西,我会感觉更好;-)

例如,动物园对象

library(zoo)
tz <- structure(c(7L, 7L, 1L, 6L, 0L, 9L, 0L, 1L, 6L, 0L, 3L, 3L, 5L, 
0L, 8L, 2L, 0L, 3L, 2L, 5L, 2L, 3L, 4L, 7L, 8L, 9L, 0L, 1L, 4L, 
5L, 6L, 7L, 8L, 2L, 3L, 4L, 5L, 8L, 9L, 0L), .Dim = c(20L, 2L
), .Dimnames = list(NULL, c("x", "y")), index = structure(c(13880, 
13881, 13913, 13916, 13946, 13947, 13948, 13980, 13983, 13984, 
13985, 14016, 14048, 14082, 14083, 14115, 14147, 14180, 14212, 
14243), class = "Date"), class = "zoo")

使用as.yearmon()添加年/月变量似乎很容易。如果我在数据框架中,这将产生一个良好的字符变量,但是在动物园的悲剧中,如果您忘记包裹as.numeric()

tz$yrmo <- as.numeric(as.yearmon(index(tstz)))
> head(tz)
           x y     yrmo
2008-01-02 7 2 2008.000
2008-01-03 7 3 2008.000
2008-02-04 1 4 2008.083
2008-02-07 6 7 2008.083
2008-03-08 0 8 2008.167
2008-03-09 9 9 2008.167

这看起来很棒,我可以成功比较数据元素

(tz $ x [6]!= tz $ y [6])
2008-03-09
错误的

但是,当我比较年度/月变量时,为什么要获得此结果?

> (tz$yrmo[2] != tz$yrmo[1])
Data:
logical(0)

Index:
character(0)

为什么以这种方式测试年度蒙蒙或数据项()失败? (两者都应该是真的)

> identical(tz$yrmo[2] , tz$yrmo[1])
[1] FALSE
> identical(tz$x[2] , tz$x[1])
[1] FALSE

我只是在使用YearMon()在动物园中创建索引课的YearMon()玩Fire吗?我是否应该切换到Dirk Eddelbuettel的“将约会变成月份”之类的东西? 两个日期之间的月数

有帮助吗?

解决方案

Q1:输出具有数据和索引部分的线索是这些是动物园对象。因此,它们具有比较的索引属性,并且不等。如果要比较值,则可以访问coredata():

> (coredata(tz$yrmo[2]) != coredata(tz$yrmo[1]))
[1] FALSE
> coredata(tz$yrmo[2])
[1] 2008
> coredata(tz$yrmo[1])
[1] 2008

Q2: identical 检查不仅仅是数字值。它还决定了所有属性的平等。

> attributes(tz$yrmo[2])
$index
[1] "2008-01-03"

$class
[1] "zoo"
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top