我在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
答案 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]