Функция ограничения возвращает ошибку о пропущенных значениях и NaN? - PullRequest
1 голос
/ 26 апреля 2019

Я пытаюсь использовать следующую функцию, чтобы ограничить некоторые выбросы, чтобы мой набор данных был аккуратным:

cap <- function(x){
    quantiles <- quantile(x, c(.05, 0.25, 0.75, .95))
    x[x < quantiles[2] - 1.5*IQR(x)] <- quantiles[1]
    x[x > quantiles[3] + 1.5*IQR(x)] <- quantiles[4]
    x
}

Однако, похоже, что каждый раз, когда я пытаюсь его использовать, я получаю следующую ошибку:

"Ошибка в quantile.default (x, c (0,05, 0,25, 0,75, 0,95)): отсутствует значения и значения NaN недопустимы, если «na.rm» равен FALSE "

В наборе данных, который я использую, действительно отсутствуют значения, и я хотел бы игнорировать их, чтобы выполнить эту функцию. Я попытался подключить na.rm = TRUE к отдельным частям самой функции и, похоже, не могу прийти ни к какому результату, кроме сообщения об ошибке выше.

1 Ответ

0 голосов
/ 26 апреля 2019

Использование na.rm = T внутри quantile и IQR должно решить вашу проблему:

cap <- function(x){
  quantiles <- quantile(x, c(.05, 0.25, 0.75, 0.95), na.rm = T)
  x[x < quantiles[2] - 1.5 * IQR(x, na.rm = T)] <- quantiles[1]
  x[x > quantiles[3] + 1.5 * IQR(x, na.rm = T)] <- quantiles[4]
  return(x)
}

Вот некоторые тестовые данные: в конце я добавил два выброса (10 и -20), а также один NA. Два выброса заменены, NA не:

set.seed(1)
x <- c(rnorm(100), 10, -20, NA_real_)
cap(x)
...