which(is.na(xtsSeries)) returns 值越界

which(is.na(xtsSeries)) returns out of bounds values

我在 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

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

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

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

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

在每一行 (MARGIN = 1) 中检查 NA 个值 (any(is.na(x))))。如果您使用 which(is.na(dataXtsW)),它 returns 数据框 NA 元素的索引(不是行!)。索引指的是按列排序的元素。在您的例子中,第 54 个元素是 NA。您可以使用

进行检查
 unlist(dataXtsW)[54]