質問
月の変化をテストするために使用できる変数で動物園オブジェクトを拡張したいと思います。これを行うには、より一般的な方法があると確信しています。提案は素晴らしいことですが、この単純なアプローチが失敗する理由を理解したいと思います。ここで見逃していることを理解していたら気分が良くなりました;-)
動物園のオブジェクトの場合
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()を使用して1年/月変数を追加してください。私がデータフレームにいた場合、これは細かい文字変数を生成しますが、動物園では、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)
また、この方法でyearmonまたはdata項目をテストするのはなぜですか? (両方が真実であるべきです)
> identical(tz$yrmo[2] , tz$yrmo[1])
[1] FALSE
> identical(tz$x[2] , tz$x[1])
[1] FALSE
Zooでインデックスクラスを作成するYearmon()を使用して火で遊んでいますか? Dirk Eddelbuettelの「日付を1か月間に変える」ようなものに切り替える必要がありますか? 2つの日付の間の月数
解決
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