1
私はShinyアプリリアクティブ関数でdplyrを使用しています。私はUIにインタラクティブなウィジェットを持っており、ユーザはステータスを選択することができ、選択されたステータスに基づいてデータが表示されます。しかし、私はまた、すべてを表示するオプションを与えたいと思っています。これは私が「All」と呼んだ状態です。Shinyのリアクティブ関数でdplyr条件付きフィルタを使用
私はdplyrせずにこれを達成する方法を知っている:
library(tibble)
library(shiny)
# Test Data -----
test_data <- tribble(
~id, ~status,
1, 'active',
2, 'inactive',
3, 'test'
)
# Ui ----
ui = fluidPage(
selectInput("status", "Choose a status:",
choices = list("All","active","inactive","test")
),
tableOutput('result')
)
# Server ----
server = function(input, output) {
table <- reactive({
if(input$status != 'All')
{
test_data <- test_data[test_data$status == input$status,]
} else {
test_data
}
})
output$result <- renderTable(table(), rownames = FALSE)
}
# App ---
shinyApp(ui = ui, server = server)
しかし、私は私のコードと使用dplyrの残りの部分と一致するようにしたいと思います。下のようなことをする方法はありますか?
library(tibble)
library(dplyr)
library(shiny)
# Test Data -----
test_data <- tribble(
~id, ~status,
1, 'active',
2, 'inactive',
3, 'test'
)
# Ui ----
ui = fluidPage(
selectInput("status", "Choose a status:",
choices = list("All","active","inactive","test")
),
tableOutput('result')
)
# Server ----
server = function(input, output) {
table <- reactive({
test_data %>%
filter(ifelse(input$status != 'All', status == input$status, status == ***pass***))
})
output$result <- renderTable(table(), rownames = FALSE)
}
# App ---
shinyApp(ui = ui, server = server)
つまり、ifelseフィルタ機能を特定の条件でフィルタリングしない方法はありますか?
ありがとうございます!
ありがとうございました。あなたが投稿した最初の例はelseを必要とし、それ以外の場合はオプション 'All'を使って空のテーブルを表示しました - 私はそれを反映するためにあなたの投稿を編集しました。 投稿した2番目の例が気に入っています。 –