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

r max min na missing-data

482962 просмотра

6 ответа

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

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

Автор: CodeGuy Источник Размещён: 13.11.2019 11:33

Ответы (6)


241 плюса

Решение

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

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

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

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

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

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

Автор: Josh O'Brien Размещён: 09.10.2011 10:21

90 плюса

Эта na.omitфункция используется многими внутренними процедурами регрессии:

vec <- 1:1000
vec[runif(200, 1, 1000)] <- NA
max(vec)
#[1] NA
max( na.omit(vec) )
#[1] 1000
Автор: 42- Размещён: 09.10.2011 10:27

18 плюса

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

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

myvec[!is.na(myvec)]
Автор: Nick Sabbe Размещён: 09.10.2011 10:22

15 плюса

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

Автор: Michael Hoffman Размещён: 09.10.2011 10:22

12 плюса

На всякий случай, если кто-то новичок в 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.

Автор: Scott C Wilson Размещён: 17.01.2015 04:49

5 плюса

Использование discardот purrr (работает со списками и векторами).

discard(v, is.na) 

Преимущество заключается в простоте использования труб; в качестве альтернативы используйте встроенную функцию поднабора [:

v %>% discard(is.na)
v %>% `[`(!is.na(.))
Автор: qwr Размещён: 26.07.2019 05:55
Вопросы из категории :
32x32