Удалить значения NA из вектора

148

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

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

Теги:
missing-data
max
min
na

5 ответов

229
Лучший ответ

Попытка ?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 вызывает проблемы при вызове функции, стоит проверить встроенное решение среди аргументов функции. Я нашел там, как правило, уже там.

75

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

vec <- 1:1000
vec[runif(200, 1, 1000)] <- NA
max(vec)
#[1] NA
max( na.omit(vec) )
#[1] 1000
15

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

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

myvec[!is.na(myvec)]
  • 2
    Я думаю, что это лучше. na.rm и na.omit добавляют немного мусора к выводу.
  • 0
    Кроме na.omit также есть метод na.omit , поэтому он более общий.
11

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

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

Вот он:

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

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

running length(foo) дает 22.

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

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

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

11

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню