Frage

Ich möchte ein Zooobjekt mit einer Variablen erweitern, mit der ich mich für Änderungen des Monat testen kann. Ich bin sicher, dass es allgemeinere Möglichkeiten gibt, dies zu tun. Vorschläge Es würde großartig sein, aber ich würde gerne verstehen, warum dieser einfache Ansatz fehlschlägt. Ich würde mich besser fühlen, wenn ich verstehe, was ich hier fehlt ;-)

zB für ein Zooobjekt

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")

Fügen Sie eine Jahr/Monat -Variable mit As.yearMon () hinzu. Wenn ich in einem Datenrahmen wäre, würde dies eine feine Charaktervariable ergeben, aber in der Zoo tragte eine Tragödie, wenn Sie vergessen, AS.Numeric () einzuwickeln ()

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

Das sieht toll aus und ich kann Datenelemente erfolgreich vergleichen

(TZ $ x [6]! = Tz $ y [6])
2008-03-09
FALSCH

Aber warum bekomme ich dieses Ergebnis, wenn ich die Jahres-/Monat -Variable vergleiche?

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

Index:
character(0)

Und warum fällt das Testen des Jahrmon- oder Datenelements mit identisch () auf diese Weise aus? (Beide sollten wahr sein)

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

Spiele ich nur mit Fire in YearMon () mit Fire, was eine Indexklasse im Zoo erstellt? Sollte ich zu etwas wie Dirk Eddelbuettels "Ein Date in ein MonatNumber" wechseln? Anzahl der Monate zwischen zwei Daten

War es hilfreich?

Lösung

Q1: Der Hinweis in der Ausgabe mit einem Daten und einem Indexabschnitt ist, dass dies Zooobjekte sind. Sie haben also auch Indexattribute, die verglichen werden, und sie sind nicht gleich. Wenn Sie die Werte vergleichen wollten, können Sie auf die Coredata () zugreifen:

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

Q2: identical Überprüft mehr als nur die numerischen Werte. Es bestimmt auch die Gleichheit aller Attribute.

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

$class
[1] "zoo"
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top