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