其中(is.na(xtsSeries))返回超出范围的值

时间:2017-04-21 08:49:05

标签: r xts na

我在xts对象中有一些时间序列,维度为54 * 5.我有兴趣知道哪些行包含NA。对which(is.na(.))的调用给出了大于54的值(即:85,108,..)。我不明白这些价值观是什么?

> 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

2 个答案:

答案 0 :(得分:2)

在您的示例中,which()会将数据视为长度为54 * 5的向量。矩阵中的数据逐列存储,因此元素54是第一列的最后一个元素,108是第二列的最后一个元素等。

如果使用which( , arr.ind = TRUE),您将获得NA元素的数组索引(行,列)。

答案 1 :(得分:1)

如果您想知道哪些行包含NA,您可以找到使用例如

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

您检查MARGIN = 1值(NA)的每一行(any(is.na(x))))。如果您使用which(is.na(dataXtsW)),则会返回数据框的NA元素的indixes(而不是行!)。索引是指逐列排列的元素。在您的情况下,第54个元素是NA。您可以使用

进行检查
 unlist(dataXtsW)[54]