2017-04-21 1 views
1

Ich habe einige Zeitreihen in einem XTS-Objekt mit den Dimensionen 54 * 5. Ich bin interessiert zu wissen, welche Zeilen NAs enthalten. Ein Anruf an which(is.na(.)) gibt mir Werte, die größer als 54 sind (nämlich: 85, 108, ..). Ich verstehe nicht, was diese Werte sind?die (is.na (xtsSeries)) gibt Werte außerhalb der Grenzen zurück

> typeof(dataXtsW) 
[1] "double" 
> class(dataXtsW) 
[1] "xts" "zoo" 
> dim(dataXtsW) 
[1] 54 5 
> which(is.na(dataXtsW)) 
[1] 54 85 108 162 216 
> dataXtsW[85] 
Error in `[.xts`(dataXtsW, 85) : subscript out of bounds 
> dataXtsW[85,] 
Error in `[.xts`(dataXtsW, 85,) : subscript out of bounds 
> dataXtsW[54,] 
      NWHLNYHL Index LUHYTOBS Index SUM INX Index PCUSEQTR Index VIX Index 
2017-04-21    NA    NA   NA    NA 0.1305778 

Antwort

2

in Ihrem Beispiel which() werden die Daten als Vektor der Länge 54 * 5 behandeln. Daten in einer Matrix werden Spalte für Spalte gespeichert, so dass Element 54 das letzte Element der ersten Spalte ist, 108 das letzte Element der zweiten Spalte usw.

Wenn Sie which(, arr.ind = TRUE) verwenden, erhalten Sie den Array-Index (Zeile, Spalte) der NA-Elemente.

1

Wenn Sie wissen möchten, welche Zeilen NA enthalten, können Sie z.

which(apply(dataXtsW, MARGIN = 1, FUN = function(x) any(is.na(x)))) 

, wo Sie jede Zeile überprüfen (MARGIN = 1) für NA Werte (any(is.na(x)))). Wenn Sie which(is.na(dataXtsW)) verwenden, gibt es die Indices der NA Elemente Ihres Datenrahmens zurück (nicht die Zeilen!). Die Indizes beziehen sich auf die Elemente, geordnet nach Spalten. In Ihrem Fall ist das 54. Element NA. Sie können dies mit

unlist(dataXtsW)[54] 
überprüfen
Verwandte Themen