dplyr过滤器有光泽

时间:2016-05-12 09:57:56

标签: r shiny dplyr

我有一个带有过滤条件的闪亮应用程序,如果case1为真,我想保留特定verctor的所有值,如果不是,我做一个输入有光泽的过滤器。 我已经用基本的R做了它并且它可以工作但现在需要使用dplyr来优化我的应用程序。 谢谢

filter(
    ifelse(input$case1 == TRUE, 
           perimetre_commercial_estime %in% perimetres,
           perimetre_commercial_estime %in% input$perimetre
    )
 ) 

编辑1:

基数R中的等价物是:

ifelse(input$case1 == TRUE,
       my.data <- my.data[my.data$perimetre_commercial_estime %in% perimetres, ],
       my.data <- my.data[my.data$perimetre_commercial_estime %in% input$perimetre, ]                   
)

编辑2:

在杰夫回答之后,我只是通过if(条件)else重新发布了ifelse语句,并且它运作得很好......有什么建议吗?

  filter(if(input$case1 == TRUE){perimetre_commercial_estime %in% perimetres}
         else {perimetre_commercial_estime %in% input$perimetre}

2 个答案:

答案 0 :(得分:1)

你的嘘声提供了一个可重复的例子。据我所知,这个简单的例子可能对你有帮助。

library(dplyr)
x <- data.frame(a = sample(c("a","b"),10,replace=T),b = rnorm(10))
> x
   a          b
1  b -0.3862283
2  a  0.7916584
3  a -0.8751162
4  a -0.8164377
5  b -0.2174477
6  a -0.1998766
7  a  0.3356798
8  a  0.1569653
9  b  0.8326479
10 b -0.7936936

 x %>% filter(a == "a")

  a          b
1 a  0.7916584
2 a -0.8751162
3 a -0.8164377
4 a -0.1998766
5 a  0.3356798
6 a  0.1569653

答案 1 :(得分:1)

Bonjour MTB,

听起来你应该先将条件置于过滤器中。所以:

if (condition)
  var <- filter(perimetre_commercial_estime %in% perimetres)
else
  var <- filter(perimetre_commercial_estime %in% input$perimetre)

你的帖子暗示ifesle应该在filter()函数之外; dplyr允许组合/排除逻辑参数,如&amp;&amp;和||但在同一背景下。

希望我理解这个问题,我在这里寻找一些意想不到的闪亮/ dplyr行为......