Добавить новые столбцы с помощью настраиваемой функции с помощью mutate

Я хочу сделать простой и добавить новый столбец, используя для этого dplyr mutate. В основном у меня есть DF с большим количеством столбцов, и я хочу выбрать некоторые из них, только те, которые содержат hist_avg, tgt_ и monthyl_X_ly. Это должно быть просто, и добавление нового столбца, начинающегося с метрики fct_ +, не должно быть проблемой. Однако, как вы можете видеть ниже, он добавляет столбец, но со странным именем (fct_visits $ hist_avg_visits и fct_revenue $ hist_avg_revenue_lcy).

Кроме того, не уверен, но я попытался сделать это с помощью mutate +, так как это сэкономило бы мне много строк кода и не мог понять, как это сделать.

library(tidyverse) (example <- tibble(brand = c(«Brand A», «Brand A», «Brand A», «Brand A», «Brand A»), country = c(«Country A», «Country A», «Country A», «Country A», «Country A»), date = c(«2020-08-01», «2020-08-02», «2020-08-03», «2020-08-04», «2020-08-05»), visits = c(NA_real_, NA_real_, NA_real_, NA_real_, NA_real_), visits_ly = c(NA_real_, NA_real_, NA_real_, NA_real_, NA_real_), tgt_visits = c(2491306, 2491306, 2491306, 2491306, 2491306), hist_avg_visits = c(177185, 175758, 225311, 210871, 197405), monthly_visits_ly = c(3765612, 3765612, 3765612, 3765612, 3765612), revenue_lcy = c(NA_real_, NA_real_, NA_real_, NA_real_, NA_real_), revenue_ly = c(NA_real_, NA_real_, NA_real_, NA_real_, NA_real_), tgt_revenue_lcy = c(48872737, 48872737, 48872737, 48872737, 48872737), hist_avg_revenue_lcy = c(231101, 222236, 276497, 259775, 251167), monthly_revenue_lcy_ly = c(17838660, 17838660, 17838660, 17838660, 17838660))) %>% print(width = Inf) #> # A tibble: 5 x 13 #> brand country date visits visits_ly tgt_visits hist_avg_visits #> <chr> <chr> <chr> <dbl> <dbl> <dbl> <dbl> #> 1 Brand A Country A 2020-08-01 NA NA 2491306 177185 #> 2 Brand A Country A 2020-08-02 NA NA 2491306 175758 #> 3 Brand A Country A 2020-08-03 NA NA 2491306 225311 #> 4 Brand A Country A 2020-08-04 NA NA 2491306 210871 #> 5 Brand A Country A 2020-08-05 NA NA 2491306 197405 #> monthly_visits_ly revenue_lcy revenue_ly tgt_revenue_lcy hist_avg_revenue_lcy #> <dbl> <dbl> <dbl> <dbl> <dbl> #> 1 3765612 NA NA 48872737 231101 #> 2 3765612 NA NA 48872737 222236 #> 3 3765612 NA NA 48872737 276497 #> 4 3765612 NA NA 48872737 259775 #> 5 3765612 NA NA 48872737 251167 #> monthly_revenue_lcy_ly #> <dbl> #> 1 17838660 #> 2 17838660 #> 3 17838660 #> 4 17838660 #> 5 17838660 first_forecast <- function(dataset, metric) { avg_metric <- select(dataset, paste0(«hist_avg_», metric)) tgt_metric <- select(dataset, paste0(«tgt_», metric)) monthly_metric <- select(dataset, paste0(«monthly_», metric, «_ly»)) output <- avg_metric * (tgt_metric / monthly_metric) return(output) } example %>% mutate(fct_visits = first_forecast(., «visits»), fct_revenue = first_forecast(., «revenue_lcy»)) %>% print(width = Inf) #> # A tibble: 5 x 15 #> brand country date visits visits_ly tgt_visits hist_avg_visits #> <chr> <chr> <chr> <dbl> <dbl> <dbl> <dbl> #> 1 Brand A Country A 2020-08-01 NA NA 2491306 177185 #> 2 Brand A Country A 2020-08-02 NA NA 2491306 175758 #> 3 Brand A Country A 2020-08-03 NA NA 2491306 225311 #> 4 Brand A Country A 2020-08-04 NA NA 2491306 210871 #> 5 Brand A Country A 2020-08-05 NA NA 2491306 197405 #> monthly_visits_ly revenue_lcy revenue_ly tgt_revenue_lcy hist_avg_revenue_lcy #> <dbl> <dbl> <dbl> <dbl> <dbl> #> 1 3765612 NA NA 48872737 231101 #> 2 3765612 NA NA 48872737 222236 #> 3 3765612 NA NA 48872737 276497 #> 4 3765612 NA NA 48872737 259775 #> 5 3765612 NA NA 48872737 251167 #> monthly_revenue_lcy_ly fct_visits$hist_avg_visits #> <dbl> <dbl> #> 1 17838660 117225. #> 2 17838660 116280. #> 3 17838660 149064. #> 4 17838660 139511. #> 5 17838660 130602. #> fct_revenue$hist_avg_revenue_lcy #> <dbl> #> 1 633149. #> 2 608862. #> 3 757521. #> 4 711708. #> 5 688124.

Создано 28 июля 2020 г. пакетом REPEX (v0.3.0)

Вы возвращаете кусочек своей функции. Вместо изменения используйте cbind   —  person Fernando Finotto    schedule 28.07.2020

Источник: ledsshop.ru

Стиль жизни - Здоровье!