Как обрабатывать значения NaN в R (с примерами)


В R NaN означает не число.

Обычно значения NaN появляются, когда вы пытаетесь выполнить какое-либо вычисление, которое приводит к недопустимому результату.

Например, деление на ноль или вычисление логарифма отрицательного числа дают значения NaN:

#attempt to divide by zero
0 / 0

[1] NaN

#attempt to calculate log of negative value
log(-12)

[1] NaN

Обратите внимание, что значения NaN отличаются от значений NA , которые просто представляют отсутствующие значения.

Вы можете использовать следующие методы для обработки значений NaN в R:

#identify positions in vector with NaN values
which(is. nan (x))

#count total NaN values in vector
sum(is. nan (x)) 

#remove NaN values in vector
x_new <- x[!is. nan (x)]

#replace NaN values in vector
x[is. nan (x)] <- 0

В следующих примерах показано, как использовать каждый из этих методов на практике.

Пример 1. Идентификация позиций в векторе со значениями NaN

В следующем коде показано, как идентифицировать позиции в векторе, содержащие значения NaN:

#create vector with some NaN values
x <- c(1, NaN, 12, NaN, 50, 30)

#identify positions with NaN values
which(is. nan (x))

[1] 2 4

Из вывода мы видим, что элементы в позициях 2 и 4 в векторе являются значениями NaN.

Пример 2. Подсчет общих значений NaN в векторе

Следующий код показывает, как подсчитать общее количество значений NaN в векторе в R:

#create vector with some NaN values
x <- c(1, NaN, 12, NaN, 50, 30)

#identify positions with NaN values
sum(is. nan (x))

[1] 2

Из вывода мы видим, что в векторе всего 2 значения NaN.

Пример 3. Удаление значений NaN в векторе

В следующем коде показано, как создать новый вектор, в котором значения NaN удалены из исходного вектора:

#create vector with some NaN values
x <- c(1, NaN, 12, NaN, 50, 30)

#define new vector with NaN values removed
x_new <- x[!is. nan (x)]

#view new vector
x_new

[1] 1 12 50 30

Обратите внимание, что оба значения NaN были удалены из вектора.

Пример 4. Замена значений NaN в векторе

В следующем коде показано, как заменить значения NaN в векторе нулями:

#create vector with some NaN values
x <- c(1, NaN, 12, NaN, 50, 30)

#replace NaN values with zero
x[is. nan (x)] <- 0

#view updated vector
x

[1] 1 0 12 0 50 30

Обратите внимание, что оба значения NaN были заменены нулями в векторе.

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные задачи в R:

Как интерполировать пропущенные значения в R
Как найти и подсчитать пропущенные значения в R
Как использовать «Это не NA» в R

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.