【问题标题】:Cannot use if else with dplyr不能将 if else 与 dplyr 一起使用
【发布时间】:2020-07-13 11:15:28
【问题描述】:

我正在尝试在 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)} %>%

它返回一个不同的错误:

Error in get: invalid first argument

问题是,如果我尝试在没有条件的情况下执行相同的代码,无论我选择什么条件,它都可以工作......

【问题讨论】:

  • 试试filter(ifelse(product != "Todos", producto == product, TRUE))。我认为您应该分享您的预期输出和更多输入数据。听起来我们可以大大优化您的代码。
  • 您好 Roman,谢谢您的回答。我刚刚编辑了帖子并尝试添加更多信息。我也尝试了您公开的解决方案,但现在它返回以下错误:Error: no applicable method for 'filter_' applied to an object of class "logical"product (input$sumProduct) 的第一个值是“Todos”。但似乎试图评估 else 语句而不是 if...

标签: r dplyr shiny


【解决方案1】:

您可以使用以下语法尝试条件行:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-28
    • 1970-01-01
    • 1970-01-01
    • 2017-02-22
    • 1970-01-01
    相关资源
    最近更新 更多