Пользовательская функция в R не работает - PullRequest
0 голосов
/ 25 ноября 2018

Я пытаюсь запустить приведенный ниже код в R, но он не работает.Нужна ваша помощь.Позвольте мне объяснить мое требование.
У меня есть фрейм данных с именем Data.В этом у меня есть столбец с именем view.Давайте рассмотрим view содержит 6 значений 1,2,3,5,20,NA.Теперь я хочу рассчитать 99 процентиль на просмотр.Использование функции квантиля на этих данных даст мне значение квантиля 19 (округленное).Теперь я проверяю условие, если столбец представления, имеющий любое значение больше 19, заменит его на 19. Здесь в нашем примере у нас есть одно значение больше 19, которое равно 20, поэтому 20 следует заменить на 19.

Теперь, если я запускаю весь код вручную, как показано ниже, он прекрасно работает

Data <- data.frame(view=c(1,2,3,5,20,NA))

summary(Data)
n = quantile(Data$view, 0.99, na.rm = TRUE)

Data$view[Data$view > n] <- n

Но я хочу создать функцию, которая может просто вызывать переменную из фрейма данных и выполнять вышеуказанную работу.Ниже приведена функция, которую я пробовал, но она не работает.

ReplaceQuantile <- function(x) {
  n = quantile(na.omit(x),0.99)
  x[x > n] <- n
}

ReplaceQuantile (Data$view)

Надеюсь, теперь мое требование ясно.

1 Ответ

0 голосов
/ 25 ноября 2018

Ваш код почти работает.Я рекомендую использовать na.rm = TRUE в своей функции квантиля вместо na.omit:

ReplaceQuantile <- function(x) {
  n = quantile(x, 0.99, na.rm = TRUE)
  x[x > n] <- n
  x
}

ReplaceQuantile (Data$view)

Таким образом, вы удаляете NA, и ваша функция должна работать.

РЕДАКТИРОВАТЬ: Считайте, что это воспроизводимопример:

Data <- data.frame(view = c(seq(1, 5, by = .1), NA))

ReplaceQuantile <- function(x) {
   n = quantile(x, 0.99, na.rm = TRUE)
   x[x > n] <- n
   x
}

ReplaceQuantile(Data$view)

РЕДАКТИРОВАТЬ II для уточнения: Вам необходимо присвоить результат Data$view, чтобы перезаписать исходные значения:

Data <- data.frame(view=c(1,2,3,5,20,NA))

ReplaceQuantile <- function(x) {
   n = quantile(x, 0.99, na.rm = TRUE)
   x[x > n] <- n
   x
  }

 Data$view <- ReplaceQuantile(Data$view)

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

 Data$view
 [1]  1.0  2.0  3.0  5.0 19.4   NA
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...