2

月の変化をテストするために使用できる変数を使用して、zooオブジェクトを拡張したいと思います。これを行うにはもっと一般的な方法があると確信しています。提案は素晴らしいと思いますが、この単純なアプローチが失敗する理由を理解したいと思います。私がここで欠けているものを理解したなら、私は気分が良くなるでしょう;-)

たとえば、動物園のオブジェクトの場合

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
FALSE

しかし、年/月の変数を比較すると、なぜこの結果が得られるのですか?

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

Index:
character(0)

そして、なぜ、yearmonまたはsidentity()を使用したデータ項目のテストがこのように失敗するのですか?(両方とも真である必要があります)

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

動物園でインデックスクラスを作成するyearmon()を使用して、火遊びをしているだけですか?Dirk Eddelbuettelの「日付を月番号に変える」のようなものに切り替える必要がありますか? 2つの日付の間の月数

4

1 に答える 1

3

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"
于 2011-09-05T18:58:09.233 に答える