Существуют ли разные типы НС?

Я использую пакет rattle, чтобы выполнить некоторую очистку данных, и я рассматриваю первую переменную X в моем наборе данных. Он сообщает, что когда я делаю на первой вкладке, вкладке "Данные", я получаю некоторые базовые данные из набора данных и говорит, что переменная X имеет 1243 пропущенных значения. Это также значение, которое я получу, если использую sum(is.na(my_df[,1])),

На следующей вкладке, вкладке "Исследовать", когда я проверяю "Сводка", теперь говорится, что у меня всего 942 NA в переменной X.

Как я могу понять эти разные цифры? Я вручную немного просмотрел свой набор данных и просмотрел ряды, в которых были NA, и все эти NA выглядят одинаково (я понимаю, что иногда существуют разные типы NA).

(Дополнительный вопрос: sum(is.na(my_df[,1]), na.rm = FALSE) а также sum(is.na(my_df[,1]),na.rm = TRUE) также оба производят одинаковое число 1243, почему? Я бы ожидал, что один дает мне length(my_df[,1])-1243.)


РЕДАКТИРОВАТЬ Вот набор данных, который имеет эту проблему: https://wetransfer.com/downloads/cf454b2c12857a4e3770102a7222422f20171019153755/516fb0.

Числа в этом немного отличаются, вместо 1243, у нас есть 88 NA согласно вкладке "Данные" в rattle() (или, что эквивалентно, согласно summary(ten_df)) и 62 NA в соответствии с "Исследовать" с проверенной вкладкой "Сводка".

Но теперь я подозреваю, что мой набор данных поврежден, потому что перед загрузкой полного набора я хотел первоначально загрузить только один иллюстративный столбец. Но когда я выполню

ten_df = read.csv("ten.csv",sep=";") 
my_df = as.data.frame(ten_df[,3])

так как я хочу посмотреть на третий столбец с var2 а также my_df было то, что я хотел загрузить изначально, последняя команда возвращает ошибку

Warning messages:
1: In rep(no, length.out = length(ans)) :
  'x' is NULL so the result will be NULL

Кроме того, при выборе my_df для последующего анализа с помощью трещотки трещотка говорит "0 входная переменная" на панели внизу, где она дает обратную связь. Как это может быть?

1 ответ

?NA

NA - логическая константа длины 1, которая содержит индикатор отсутствующего значения. NA может быть приведен к любому другому векторному типу, кроме raw. Существуют также константы NA_integer_, NA_real_, NA_complex_ и NA_character_ других типов атомарных векторов, которые поддерживают пропущенные значения: все они являются зарезервированными словами в языке R.

class(NA)             # "logical"
class(NA_integer_)    # "integer"
class(NA_real_)       # "numeric"
class(NA_complex_)    # "complex"
class(NA_character_)  # "character"
is.na(NA)             # TRUE
is.na(NA_integer_)    # TRUE
is.na(NA_real_)       # TRUE
is.na(NA_complex_)    # TRUE
is.na(NA_character_)  # TRUE
identical(NA,NA_integer_)    # FALSE
identical(NA,NA_real_)       # FALSE
identical(NA,NA_complex_)    # FALSE
identical(NA,NA_character_)  # FALSE
identical(NA_character_,as.character(NA)) # TRUE
identical(NA_real_,as.numeric(NA))        # TRUE
identical(as.logical(NA_real_),NA)        # TRUE

Так что NA это logical, Так почему же мы используем NA практически везде, не беспокоясь о классе? из-за правил принуждения:

class(c(NA,1)[1])                # "numeric"
identical(c(NA,1),c(NA_real_,1)) # TRUE
c(NA_character_,1)               # [1] NA  "1"

В зависимости от class, NA также может быть напечатан по-другому

Теперь вернемся к вашему вопросу, я не могу ответить на первый, потому что вы не предлагаете воспроизводимых данных, но почему sum(is.na(my_df[,1]), na.rm = FALSE) а также sum(is.na(my_df[,1]),na.rm = TRUE), это потому что is.na(my_df[,1]) только из TRUE а также FALSEне NAs.

Вы также можете попробовать length(na.omit(my_df[,1])),

РЕДАКТИРОВАТЬ:

Данный столбец data.frame имеет только элементы одного класса, поэтому у вас не будет разных NA_character_ а также NA_real_ в том же столбце.

Однако часто случается так, что у вас будут строки, значение которых "NA"не стоит, конечно, ожидать is.na обнаружить те. В этих случаях вы можете использовать df[df == "NA"] <- NA иметь регулярный NAс вместо "NA" строки в вашем data.frame

Другие вопросы по тегам