Создать новую переменную, в которой все значения, которые не находятся между 1-м и 99-м процентилями, заменяются пропущенными значениями (NA)

#r #if-statement #rank #dplyr

#r #if-оператор #ранг #dplyr

Вопрос:

Я хочу скопировать фрейм данных india04 и добавить новую переменную с именем «incwage_adj», используя mutate(), где все значения дохода между 1-м и 99-м процентилями заменяются пропущенными значениями (NA). Упаковка:

 library(tidyverse)
require(nycflights13)
data(diamonds)
load("india04.Rdata")
  

Код:

 india04_new <- india04 %>%
mutate(incwage_adj = ifelse(incwage != quantile(india04_new2$incwage, 0.99), NA, incwage))
  

Комментарии:

1. Вы можете использовать ifelse(between(incwage, quantile(india04_new2$incwage, 0.99), incwage, NA)

2. india04_new2 <- india04 %>% мутировать(incwage_adj = ifelse(между(incwage, квантиль(india04_new2 $incwage, 0.99), incwage, NA))) Возвращает: «Ошибка между (incwage, квантиль(india04_new2 $incwage, 0.99), incwage, : неиспользуемый аргумент (NA)»

3. Я думаю, что вам quantile нужно иметь два probs , т.е. ifelse(between(incwage, quantile(incwage, 0.01), quantile(incwage, 0.99)), incwage, NA))

4. Теперь возвращает: ошибка в квантиле. по умолчанию (incwage, 0.01): пропущенные значения и значения NaN не допускаются, если ‘na.rm’ имеет значение FALSE

5. вы используете diamonds или другие данные

Ответ №1:

Мы можем использовать between для создания логического условия и изменения значений, которые не находятся между 1 и 99%, на NA

 library(dplyr)
 mtcars %>% 
    mutate(mpg_adj =  ifelse(between(mpg, 
      quantile(mpg, 0.01, na.rm = TRUE), 
      quantile(mpg, 0.99, na.rm = TRUE)), mpg, NA))
  

Или с case_when

 mtcars %>% 
    mutate(mpg_adj =  case_when(between(mpg, 
      quantile(mpg, 0.01, na.rm = TRUE), 
      quantile(mpg, 0.99, na.rm = TRUE))~ mpg))
  

Ответ №2:

Попробуйте выполнить следующее :

 india04_new2$incwage[with(india04_new2, 
 incwage > quantile(incwage, 0.01) amp; incwage < quantile(incwage, 0.99))] <- NA
  

Это должно заменить все incwage значения, которые находятся между 1-м и 99-м процентилями.