2016-04-14 22 views
0

selectInputのドロップダウンメニューに、ユーザーがアップロードするファイルの列の一意の値を設定しようとしています。しかし、問題は、私は特定の非アルファベット順に選択肢を表示したいということですので、私はちょうどShiny - 選択入力のオプションをアルファベット順で表示しない

updateSelectInput(....., choices = sort(unique(dataframe$column))) 

4の可能なオプションを使用することはできません、次のとおりです。経済、プレミアムエコノミー、ビジネス、および最初。私はそれらがデータフレームに存在するときは常に、そのような順序で表示したいと思います。

ありがとうございました!

+0

確かに、ファクタ(c( "エコノミー"、 "プレミアムエコノミー"、 "ビジネス"、 "ファースト")、レベル= c(エコノミー、プレミアムエコノミー、 "first")) ' –

+0

返事をありがとう。私は 'choose = factor(unique(dataframe $ Column)、levels = c(" Economy "、" Premium economy "、" Business "、" First ")、ordered = TRUE'を試したが、ドロップダウンメニューでは、 –

+0

は 'data.frame $ Column'に因子レベルを設定し、次にドロップダウンで' choices = as.character(dataframe $ Column) 'を使用します。 – SymbolixAU

答えて

2

私は@Symbolixからのヒントで問題を修正しました。私が第一の要因作成:updateSelectInput

cabin <- factor(dataframe$column, levels = c("Economy", "Premium Econ", "Business", "First")) 

を、私は

...., choices = levels(factor(cabin)) 

factorを呼び出す必要があり、再びデータセット内に存在しないレベルのために生成されているNASに削除されます。

1

上記の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}) 

}) 
関連する問題