Как обрабатывать значения 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. no (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. no (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