上記の4つのオプションのセットをアプリにハードコードすることができる場合は、intersect
を使用してこれを達成できます。ユーザーがアップロードしたファイルの内容をd1
というdata.frameに入れ、対象の列がClass
であるとしましょう。一連のオプションを、データ内の一意のレベルのセットと交差させて、オプションのセットを取得します。
ui.R
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")) ' –
返事をありがとう。私は 'choose = factor(unique(dataframe $ Column)、levels = c(" Economy "、" Premium economy "、" Business "、" First ")、ordered = TRUE'を試したが、ドロップダウンメニューでは、 –
は 'data.frame $ Column'に因子レベルを設定し、次にドロップダウンで' choices = as.character(dataframe $ Column) 'を使用します。 – SymbolixAU