В 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