gpt4 book ai didi

r - 在 Shiny 的 react 函数中使用 dplyr 条件过滤器

转载 作者:行者123 更新时间:2023-12-04 11:21:35 25 4
gpt4 key购买 nike

我在 Shiny 应用程序响应函数中使用 dplyr。我在 UI 中有一个交互式小部件,用户可以使用它来选择状态,数据将根据所选状态显示。但是,我也想提供显示所有内容的选项,我将这种状态称为“全部”。

我知道如何在没有 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 在特定条件下不过滤?

谢谢!

最佳答案

如果您希望根据外部值有条件地应用过滤器,您可以尝试使用语法:
TRUE

table <- reactive({
test_data %>%
filter(if(input$status != 'All') (status == input$status) else TRUE)
})

路过 TRUE因为条件不会过滤任何行。
{}
替代方法使用 {}并返回未修改的数据集: else . .
table <- reactive({
test_data %>%
{if(input$status != 'All') filter(status == input$status) else .}
})
%<>%
最后你可以考虑打破管道并使用 %<>%运算符可在 magrittr 中使用包裹:
if(input$status != 'All') test_data %<>% filter(status == input$status)

关于r - 在 Shiny 的 react 函数中使用 dplyr 条件过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45816510/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com