Противоречие между complete.casses и которое и есть.на что я не понимаю - PullRequest
0 голосов
/ 29 сентября 2018

Я использую простой пример из набора данных "airquality".

Первые четыре строки завершены, что можно проверить просто с помощью complete.cases

Строка 5 содержит пропущенные значения.Строка 6 также содержит пропущенные значения.

Это можно быстро проверить:оператор, т. е. хотя бы одно значение 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 голосов
/ 29 сентября 2018

С help("is.na"):

Метод фрейма данных для is.na возвращает логическую матрицу с теми же измерениями, что и фрейм данных, и с dimnames, взятыми из имен строк и столбцовфрейм данных.

Другими словами, он не дает вам информацию, которую вы предполагаете, он дает вам.Это дает вам элементы матрицы, описанной выше, путем подсчета вниз по столбцам.Попробуйте

# 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
...