dplyr过滤器变量设置为不过滤任何内容[r]

时间:2018-10-31 14:48:24

标签: r dataframe filter shiny dplyr

其中是否有一个值会使dplyr过滤器不过滤任何内容?我正在使用变量基于Shiny中的下拉菜单进行过滤。

我知道if语句之类的答案this。但是,我很好奇是否有一种方法可以通过将过滤器值设置为等于“不过滤任何东西”的值来实现。

这是我正在尝试的可复制示例。

library(dplyr)

my_df <- structure(
  list(
    `Month Nm` = c("October", "August", "August",
                   "March", "January", "July"),
    Cycle = c(
      ">= 2nd Cycle Action",
      ">= 2nd Cycle Action",
      ">= 2nd Cycle Action",
      ">= 2nd Cycle Action",
      "ACK or RTA",
      ">= 2nd Cycle Action"
    )
  ),
  row.names = c(NA,-6L),
  class = c("tbl_df",
            "tbl", "data.frame")
)

filter_var <- October"

my_df %>% filter(`Month Nm` == filter_var) %>% View()

# How can I set the variable (filter_var) that will make the filter not filter anything?
filter_var <- "" # What can I set this to? 

my_df %>% filter(`Month Nm` == filter_var) %>% View() # I want the output to be everything

我尝试将值设置为NULL,TRUE和FALSE只是为了好玩,但没有运气。

我想做到这一点的一种方法是在感兴趣的列中找到所有不同的值,然后基于所有方法进行过滤?还有更简洁的方法吗?

2 个答案:

答案 0 :(得分:1)

您可以简单地创建一个虚拟测试值并将其用于您的过滤条件,如下所示-

dummy <- "all"

filter_var <- "all"

my_df %>%
  filter(`Month Nm` == filter_var | filter_var == dummy)

# A tibble: 6 x 2
  `Month Nm` Cycle              
  <chr>      <chr>              
1 October    >= 2nd Cycle Action
2 August     >= 2nd Cycle Action
3 August     >= 2nd Cycle Action
4 March      >= 2nd Cycle Action
5 January    ACK or RTA         
6 July       >= 2nd Cycle Action

filter_var <- "August"

my_df %>%
  filter(`Month Nm` == filter_var | filter_var == dummy)

# A tibble: 2 x 2
  `Month Nm` Cycle              
  <chr>      <chr>              
1 August     >= 2nd Cycle Action
2 August     >= 2nd Cycle Action

dummy应该是您的实际过滤器变量中不存在的值。

答案 1 :(得分:1)

如果可以(在这种情况下可以帮助您),我建议不要将数据框更改为包括实现细节。

您可以在template<int = 0> void Foo(int*); void Foo(std::nullptr_t); 语句中直接使用or语句。只需在下拉菜单中添加一个名为filter的选项,然后更改您的"All Months"语句:

filter