以下代码。我想基于两个输入过滤data.frame。 input$SelectGroup4
将是data.frame中的列名称,input$subsetSelect
是该列中的值。这可能吗?注意:整个代码库要大得多,所以我只拿出了这段代码的关键部分。这段代码可能不会在它自己的代码上运行,但这只是为了得到一个大概。
library(shiny)
library(data.table)
ui = fluidPage(
uiOutput('textField'),
uiOutput('docIdField'),
fluidRow(column(4,textInput("keyword", "Enter keyword :", "WB")),
fluidRow(column(4, sliderInput("context", "Enter number of words for context :",
min = 1, max = 10,
value = 5))),
fluidRow(column(4,uiOutput('selectGroup4'))),
fluidRow(column(4,uiOutput('subsetSelect'))),
fluidRow(column(10,DT::dataTableOutput("kwicTable"))))
}
server = function(input,output){
df_corpus1 <- reactive({
dTemp = as.data.table(datasetInput())
dTemp = dTemp %>% filter(input$selectGroup4==input$subsetSelect)
})
output$kwicTable=renderDataTable({
dtemp = df_corpus1()
dtemp = corpus(as.data.frame(dtemp),text_field=input$textField,docid_field=input$docIdField)
x = kwic(x = dtemp,pattern=input$keyword,window=input$context)
x = as.data.table(x)
x[,4:6]
})
}
shinyApp(ui,server)
答案 0 :(得分:2)
是的,你可以这样做。由于我们无权访问您的数据集,因此这是一个包含mtcars
数据集的工作示例。
希望这有帮助!
library(shiny)
ui <- fluidPage(
selectInput('col','Column',colnames(mtcars)),
uiOutput('ui_col'),
dataTableOutput('table')
)
server <- function(input,output){
# Create a new input element with the unique values of the selected column
output$ui_col <- renderUI({
req(input$col)
selectizeInput('val','Value',unique(mtcars[[input$col]]),multiple=T)
})
# If both inputs are not null, filter the table
output$table <- renderDataTable({
df <- mtcars
if(!is.null(input$col) & !is.null(input$val))
{
df = df[df[[input$col]] %in% input$val,]
}
df
})
}
shinyApp(ui = ui, server = server)