Frage

Lassen Sie uns sagen, ich habe diesen Zoo Vektor

mine <- zoo(c(rep(0,4),rep(1,4),rep(0,5),rep(1,23),rep(0,4),rep(1,2)),as.chron(seq(1:42)))

Und ich möchte mehrere Elemente in einer bestimmten Reihenfolge

extrahieren
> mine[14]
01/15/70 
       1 
> mine[5]
01/06/70 
       1 
> mine[41]
02/11/70 
       1 

Es funktioniert !. Aber jetzt versuche ich es auf eine andere Art und Weise zu tun,

zz <- c(14, 5, 41)
mine[zz]

01/06/70 01/15/70 02/11/70 
       1        1        1 

Ich weiß nicht, warum ich es in einer anderen Reihenfolge bekommen. Wie kann ich die Reihenfolge halte ich die Reihenfolge meiner Liste will ?? Ich habe nichts dagegen, wenn es sich um eine Liste ist, ein Vektor, durch Spalten oder Zeilen, aber ich möchte es in Ordnung bringen ich gebeten habe.

cheers

War es hilfreich?

Lösung

Die Antwort, warum dieser Zoo tut, ist, dass es ein Verfahren für die Funktion [ ([.zoo) hat, und es erzeugt ein neues Zoo-Objekt aus den subsetted Werten, die es logisch so neu zu ordnen will, dass es ein gültiges Zoo Objekt .

können Sie erreichen, was Sie wollen, indem sie die Zeitindizes und Daten über die entsprechenden Zugriffsfunktionen zuzugreifen:

> index(mine)[c(14, 5, 41)]
[1] 01/15/70 01/06/70 02/11/70
> coredata(mine)[c(14, 5, 41)]
[1] 1 1 1

Wenn Sie dies in einem einzigen Schritt kombinieren möchten, schreiben Sie Ihren eigenen Spaß zu tun:

myExtract <- function(x, want) {
    out <- coredata(mine)[want]
    names(out) <- index(x)[want]
    out
}

Was gibt:

> myExtract(mine, want = c(14, 5, 41))
01/15/70 01/06/70 02/11/70 
       1        1        1
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top