написать функцию для замены переменной на себя плюс 1% от ее медианы - PullRequest
1 голос
/ 18 апреля 2020

Я новичок в написании функций на R, но хочу написать функцию, чтобы добавить 1% медианы переменной к себе, используя dplyr, и заменить переменную этим преобразованием.

x это переменная цифра c.

add_median <- function(df, x) {
  x <- enquo(x)
  x <- quo_name(x)
  mutate(x=x+.01*median(x, na.rm=T)) 
  }

Когда я запускаю newDF <- DF %>% add_median(variable_of_interest), я получаю следующую ошибку:

Ошибка в 0,01 * медиана (x, na.rm = T): non-numberri c аргумент бинарного оператора

Что я здесь не так делаю?

1 Ответ

0 голосов
/ 18 апреля 2020

Мы могли бы изменить функцию для оценки с помощью {{}} и затем использовать assign (:=) вместо = в mutate

library(dplyr)
add_median <- function(df, x) {
         df %>%
              mutate({{x}} := {{x}} + .01 * median({{x}}, na.rm = TRUE))
 }

Если нам нужно изменить несколько столбцов, используйте mutate_at

add_median_multiple <- function(df, vec){
    df %>%
         mutate_at(vars(vec), ~ . + .01 * median(., na.rm = TRUE))
  }

- тестирование

data(mtcars)
head(mtcars) %>%
     add_median(mpg)
#                    mpg cyl disp  hp drat    wt  qsec vs am gear carb
#Mazda RX4         21.21   6  160 110 3.90 2.620 16.46  0  1    4    4
#Mazda RX4 Wag     21.21   6  160 110 3.90 2.875 17.02  0  1    4    4
#Datsun 710        23.01   4  108  93 3.85 2.320 18.61  1  1    4    1
#Hornet 4 Drive    21.61   6  258 110 3.08 3.215 19.44  1  0    3    1
#Hornet Sportabout 18.91   8  360 175 3.15 3.440 17.02  0  0    3    2
#Valiant           18.31   6  225 105 2.76 3.460 20.22  1  0    3    1

сравнение с оригинальным столбцом 'mpg'

head(mtcars)
#                   mpg cyl disp  hp drat    wt  qsec vs am gear carb
#Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
#Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
#Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
#Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
#Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
#Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1

add_median_multiple(head(mtcars), c('mpg', 'wt'))
#                    mpg cyl disp  hp drat      wt  qsec vs am gear carb
#Mazda RX4         21.21   6  160 110 3.90 2.65045 16.46  0  1    4    4
#Mazda RX4 Wag     21.21   6  160 110 3.90 2.90545 17.02  0  1    4    4
#Datsun 710        23.01   4  108  93 3.85 2.35045 18.61  1  1    4    1
#Hornet 4 Drive    21.61   6  258 110 3.08 3.24545 19.44  1  0    3    1
#Hornet Sportabout 18.91   8  360 175 3.15 3.47045 17.02  0  0    3    2
#Valiant           18.31   6  225 105 2.76 3.49045 20.22  1  0    3    1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...