Удалить значения NA из вектора - PullRequest
167 голосов
/ 10 октября 2011

У меня есть огромный вектор, который имеет пару значений NA, и я пытаюсь найти максимальное значение в этом векторе (вектор - это все числа), но я не могу сделать это из-за NA значения.

Как я могу удалить значения NA, чтобы можно было вычислить максимум?

Ответы [ 5 ]

233 голосов
/ 10 октября 2011

Попытавшись ?max, вы увидите, что на самом деле он имеет аргумент na.rm =, установленный по умолчанию на FALSE.(Это стандартное значение по умолчанию для многих других функций R, включая sum(), mean() и т. Д.)

Установка na.rm=TRUE делает именно то, что вы просите:

d <- c(1, 100, NA, 10)
max(d, na.rm=TRUE)

Если вы хотите удалить все NA s, используйте вместо этого следующую идиому:

d <- d[!is.na(d)]

Последнее замечание: другие функции (например, table(), lm() и sort())иметь NA связанные аргументы, которые используют разные имена (и предлагают разные варианты).Поэтому, если NA вызывает у вас проблемы при вызове функции, стоит проверить наличие встроенного решения среди аргументов функции.Я обнаружил, что обычно один уже есть.

84 голосов
/ 10 октября 2011

Функция na.omit - это то, что многие процедуры регрессии используют внутри:

vec <- 1:1000
vec[runif(200, 1, 1000)] <- NA
max(vec)
#[1] NA
max( na.omit(vec) )
#[1] 1000
17 голосов
/ 10 октября 2011

?max показывает, что есть дополнительный параметр na.rm, который можно установить на TRUE.

Кроме того, если вы действительно хотите удалить NA s, просто используйте что-то вроде:

myvec[!is.na(myvec)]
13 голосов
/ 10 октября 2011

Вы можете позвонить max(vector, na.rm = TRUE).В более общем смысле вы можете использовать функцию na.omit().

12 голосов
/ 17 января 2015

На всякий случай, если новичок в R хочет получить упрощенный ответ на первоначальный вопрос

Как мне удалить значения NA из вектора?

Вот оно:

Предположим, у вас есть вектор foo следующим образом:

foo = c(1:10, NA, 20:30)

работает length(foo) дает 22.

nona_foo = foo[!is.na(foo)]

length(nona_foo) равно 21, потому что значения NA были удалены.

Помните, is.na(foo) возвращает логическую матрицу, поэтому индексирование foo с противоположным этому значению даст вам все элементы, которые не являются NA.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...