2016-05-12 6 views
0

У меня есть блестящее приложение с условием фильтра, где я хочу сохранить все значения определенного аргумента, если case1 истинно, например, если нет, я делаю фильтр с входным блеском. Я уже делал это с базовым R, и он работает, но теперь мне нужно оптимизировать свое приложение, используя dplyr. Спасибоdplyr filter in shiny

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

EDIT 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, ]     
) 

EDIT 2:

После Джеф ответил, я просто remplaced в IfElse заявление, если (условие) еще, и это прекрасно работает ... любое предложение?

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

ответ

1

Bonjour MTB,

Это звучит, как вы кладете ваше состояние внутри фильтра, когда он должен быть первым. Итак:

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

Ваше сообщение предполагает, что ifesle должен находиться вне функции filter(); dplyr допускает логические аргументы комбинации/исключения, такие как & & и || но в том же контексте.

Надеюсь, что я понял проблему, я выслеживая некоторое неожиданное блестящее поведение/dplyr здесь сам ...

+0

Bonjour Jeff :) Спасибо за ваш ответ, я внедрил инструкцию ifelse, если заявление else в фильтре dplyr и, похоже, работает ... странно! –

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 
+0

Спасибо koundy, но это не то, что я ищу. Я хочу фильтровать с условием на блестящем, поэтому я использую оператор ifelse. Например, для переменной «perimetre_commercial-estime» я хочу блестяще отображать, что я выбираю модальности во входном $ perimetre, но когда я проверяю «case1», я хочу сохранить все модальности в векторе «периметров». –