Вопросы

Добавить новые столбцы с помощью настраиваемой функции с помощью 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)

Читать:
Ошибки Rstan в R: ошибка в inDL и сбой LoadLibrary

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

Похожие записи

Flask-WTForms Как обойти автоматическую предварительную проверку для радиополей

admin

SwiftUI — Как остановить ScrollView, получающий касания за другим представлением

admin

Python – создайте текстовую границу с динамическим размером

admin

Использование git в Azure Devops

admin

Вставьте новую пару значений ключа внутрь и массива объектов, но значение создается axios.get

admin

Как обновить слои классификации без изменения весов для сверточных слоев

admin