我不理解的complete.cascas和which and is.na之间的矛盾

时间:2018-09-29 12:49:37

标签: r which

我使用数据集“ airquality”中的一个简单示例。

前四行是完整的,只需用complete.cases即可检查

第5行包含缺失值。 第6行还包含缺失值。

可以通过以下方法快速检查:

is.na(airquality[5,])
is.na(airquality[6,])

我希望which(is.na(airquality))会给我包含至少一个真实语句(即至少一个NA值)的行号列表。

但是,它列出了5、10、25 ...,即未列出第6行。为什么?在第6行中有一个NA值!

library(datasets)
complete.cases(airquality)
is.na(airquality[5,])
is.na(airquality[6,])
which(is.na(airquality))

这里显然有一些我不理解的地方。非常感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

来自# get the cases with missingness which(!complete.cases(airquality)) [1] 5 6 10 11 25 26 27 32 33 34 35 36 37 39 42 43 45 46 52 [20] 53 54 55 56 57 58 59 60 61 65 72 75 83 84 96 97 98 102 103 [39] 107 115 119 150 # and check against is.na unique(sort(which(is.na(airquality), arr.ind = TRUE)[ , 1])) [1] 5 6 10 11 25 26 27 32 33 34 35 36 37 39 42 43 45 46 52 [20] 53 54 55 56 57 58 59 60 61 65 72 75 83 84 96 97 98 102 103 [39] 107 115 119 150 all.equal(which(!complete.cases(airquality)), unique(sort(which(is.na(airquality), arr.ind = TRUE)[ , 1]))) TRUE

  

is.na的数据帧方法返回具有相同逻辑矩阵   尺寸作为数据框,并从行和   数据框的列名称。

换句话说,它不是在向您提供假设的信息。通过计数向下的列,它为您提供了上述矩阵的元素。试试

{{1}}