Невозможно использовать if else с dplyr - PullRequest
0 голосов
/ 13 июля 2020

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

head(example)

# A tibble: 20 x 7
   producto med_corte1_semana genero        aspecto          calidad    calibre     anyo
   <chr>                <dbl> <chr>         <chr>            <chr>      <chr>      <dbl>
 1 Pepino                  NA Almería       Sin clasificar ~ Sin clasi~ Sin clasi~  2012
 2 Pimiento                NA California r~ rojo             Sin clasi~          M  2012
 3 Pimiento                NA California r~ rojo             Sin clasi~ Sin clasi~  2012
 4 Pimiento                NA California r~ rojo             Sin clasi~ Sin clasi~  2012
 5 Pimiento              1,12 California r~ rojo             Sin clasi~ Sin clasi~  2012
 6 Pimiento                NA California r~ rojo             Sin clasi~ Sin clasi~  2012
 7 Pimiento                NA California n~ naranja          Sin clasi~ Sin clasi~  2012
 8 Pimiento                NA California a~ amarillo         Sin clasi~          G  2012
 9 Pepino                1,20 Snack         Sin clasificar ~ Sin clasi~ Sin clasi~  2012
10 Pepino                  NA Almería       Sin clasificar ~ Sin clasi~ Sin clasi~  2012
11 Pimiento              1,22 Sweet-Bite n~ naranja                   E Sin clasi~  2012
12 Pimiento                NA Ramiro        Sin clasificar   Sin clasi~ Sin clasi~  2012
13 Pimiento              1,40 California r~ rojo                     II Sin clasi~  2012
14 Pimiento                NA California a~ amarillo         Sin clasi~          S  2012
15 Pepino                1,54 Almería       Sin clasificar ~ Sin clasi~ Sin clasi~  2012
16 Tomate                  NA Baby-Plum     Sin clasificar ~          I Sin clasi~  2012
17 Pimiento              1,37 Sweet-Bite r~ rojo                      I Sin clasi~  2012
18 Pimiento                NA Sweet-Bite n~ naranja          Sin clasi~ Sin clasi~  2012
19 Pimiento                NA Ramiro        Sin clasificar   Sin clasi~ Sin clasi~  2012
20 Pimiento              1,14 California r~ rojo             Sin clasi~ Sin clasi~  2012

В Shiny у меня есть 2 входа для выбора. Первый вход предназначен для продукта (producto), и его начальное значение - «Todos» (все). Когда пользователь выбирает продукт (Pepino, Pimiento, Tomate ...), он может видеть второй вход выбора, и у него есть возможность выбрать фильтр (genero, aspecto, calidad, calibre) для группировки. Я пытаюсь преобразовать данные следующим образом:

profitabilitySum <- function() {
      product <- input$sumProduct
      filter_choice <- input$sumFilter
      applied_filter <- names(filters[match(filter_choice, filters)])
      f_period <- input$sumPeriod[1]
      s_period <- input$sumPeriod[2]

      subdata <- agrodata %>%
        filter(!is.na(med_corte1_semana)) %>%
        {if(product != "Todos") filter(producto == product)} %>%
        filter(between(anyo, f_period, s_period)) %>%
        {if(product != "Todos") group_by(filtro = producto) else group_by(filtro = get(applied_filter))} %>%
        summarise(precio = mean(med_corte1_semana))  %>%
        mutate_if(is.numeric, round, roundDecimals)
    
      return(subdata)
      
    }

И сначала я получаю эту ошибку:

Error in UseMethod: no applicable method for 'filter_' applied to an object of class "NULL"

Если я прокомментирую строку

{if(product != "Todos") filter(producto == product)} %>%

It возвращает другую ошибку:

Error in get: invalid first argument

Дело в том, что если я попытаюсь выполнить тот же код без условных операторов, он будет работать независимо от того, какое условие я выберу ...

1 Ответ

0 голосов
/ 13 июля 2020

Вы можете попробовать свои условные строки с таким синтаксисом:

filter(if (product != "Todos") producto == product)%>%
   group_by(filtro= if(product != "Todos") producto else get(applied_filter))
...