我想填充selectInput的下拉菜单,用户将上传文件中的列中的唯一值。但问题是,我想在某些非字母顺序显示的选择,所以我不能只用闪亮 - 以特定(非字母)顺序显示选择输入的选项
updateSelectInput(....., choices = sort(unique(dataframe$column)))
四个可能的选项是:经济,优质经济,商业和第一。我想按照这种顺序显示它们,只要它们出现在数据框中。
非常感谢您的帮助!
我想填充selectInput的下拉菜单,用户将上传文件中的列中的唯一值。但问题是,我想在某些非字母顺序显示的选择,所以我不能只用闪亮 - 以特定(非字母)顺序显示选择输入的选项
updateSelectInput(....., choices = sort(unique(dataframe$column)))
四个可能的选项是:经济,优质经济,商业和第一。我想按照这种顺序显示它们,只要它们出现在数据框中。
非常感谢您的帮助!
我与来自@Symbolix提示解决了这一问题。我首先创建一个因素:
cabin <- factor(dataframe$column, levels = c("Economy", "Premium Econ", "Business", "First"))
在updateSelectInput
,我有
...., choices = levels(factor(cabin))
调用factor
再次消除了为数据集中不存在的条件下产生的港定居。
如果您提到的4个选项集可以硬编码到您的应用程序中,那么您可以使用intersect
来完成此操作。假设您将用户上传的文件内容放入一个名为d1
的数据框中,感兴趣的列为Class
。通过将全套选项与数据中的一组独特水平相交,获得选项集。
library(shiny)
shinyUI(fluidPage(
titlePanel("SelectInput using ordered unique choices from a column"),
sidebarLayout(
sidebarPanel(fileInput(inputId = "SampleFile", label = "Upload a csv")),
mainPanel(
uiOutput("Drop1"),
uiOutput("Drop2"),
textOutput(outputId = "outCLASS1"),
textOutput(outputId = "outCLASS2")
)
)
))
server.R
library(shiny)
shinyServer(function(input, output) {
d1 = reactive({
if(is.null(input$SampleFile)){return(NULL)
} else {d1 = read.csv(input$SampleFile$datapath)
return(d1)} })
AllOptions = c("economy", "premium economy", "business", "first")
OptionSet1 = reactive({intersect(AllOptions, levels(d1()$Class)) })
output$Drop1 = renderUI({ selectizeInput(inputId = "CLASS1", label = "Pick a class", choices = OptionSet1())})
OptionSet2 = reactive({intersect(AllOptions, levels(d1()$Category2)) })
output$Drop2 = renderUI({ selectizeInput(inputId = "CLASS2", label = "Pick a class", choices = OptionSet2())})
output$outCLASS1 = reactive({input$CLASS1})
output$outCLASS2 = reactive({input$CLASS2})
})
不确定,但你试过因素(c(“经济”,“优质经济”,“商业”,“第一”),水平= c(“经济”,“高端经济”,“ “first”))' –
感谢您的回复。我尝试过'选择=因素(独特(数据框$ Column),水平= c(“经济”,“高级经济”,“商业”,“第一”),有序= TRUE',然而,在下拉菜单中,显示列中存在的级别的索引 –
在'data.frame $ Column'上设置因子级别,然后在下拉列表中使用'choices = as.character(dataframe $ Column)' – SymbolixAU