2016-12-18 3 views
0

私はRの初心者で、小さなプロジェクトに取り組んでいます。光沢のあるデータフレームに2つのフィルタを適用する方法はありますか?私は医療専門家、都市などの複数の列を持つデータフレームに取り組んでいます。スペシャリストの列にはさまざまなタイプの専門家がいます(Ortho、Periodontistなど)。光沢のあるダッシュボードで出力を取得しようとしています同時に都市と専門家によるデータ。またはダッシュボード上の2つのフィルタを使用して、まず都市別にフィルタをかけてから、スペシャリストフィルタを適用します。その出力は、その都市のすべての専門家(オルト、ペリオなど)のリストを私に与えます。シャイニーダッシュボード

ここでは、私が取り組んでいるサンプルコードです。前もって感謝します。

output$origin <- renderUI({ 
    options <- sort(unique(city.df$specialist)) 
    selectInput("city","Select Specialist",as.list(options)) 
+3

実際にコードをテストしましたか?結果を共有してください。上に戻る –

答えて

1

私はあなたが達成したいとは思っていません。

2つ以上の選択された入力に応じてdata.frameをスライスするのは簡単です。

一方、コードスニペットでは、サーバー側の関数で使用される光沢のある関数renderUIを参照します。これは光沢の最も興味深い側面の1つですが、反応性と一緒に初心者のために把握するのが最も難しいものの一つです。

これはrenderUIない単純な例(故意等のフォーマットに簡単に維持)である:以下の例では、サーバー側のプログラミングを使用

library(shiny) 

city <- c('London','Tokio','New York') 
specialist <- c('ortho', 'perio','gyne', 'rhino') 
df <- expand.grid(city = city, specialist = specialist) 

opt_specialist <- sort(unique(df$specialist)) 
opt_city <- sort(unique(df$city)) 

ui <- fluidPage(
    selectInput("spec","Select Specialist",opt_specialist), 
    selectInput("city","Select City",opt_city), 
    verbatimTextOutput('city_'), 
    verbatimTextOutput('spec_') 

) 

server <- function(input, output, session) { 

    output$city_ <- renderText({input$city}) 
    output$spec_ <- renderText({input$spec}) 

} 

shinyApp(ui = ui, server = server) 

。より複雑なサーバーサイド操作と組み合わせて使用​​しない限り、それを使用することはあまり意味がありません。

私が何かを見逃した場合は、投稿を編集または延長してください。それに応じて回答を修正します。

0

恐らく理想的な世界では、最初の2つの変数のいずれかを選択できるようにUIが必要です。後続の変数のドロップダウンが最初のサブセットによって返される値の世界に限定されますか?

1

はあなたが行うことができる2つのオプションがあり、最も簡単:

DTパッケージを使用して、テーブルにそれをフィルタリング:https://rstudio.github.io/DT/

または:DTウェブサイトからの例ザッツ

iris2 = iris[c(1:10, 51:60, 101:110), ] 
datatable(iris2, filter = 'top', options = list(
    pageLength = 5, autoWidth = TRUE 
)) 

テーブルを選択してselectInputウィジェットを2つ作成し、次にあなたのデータセットをフィルタリングする必要があります。server.R

data_filt <- reactive({ 
     if (input$select1 != "..."){ 
     data <- data[data$column1 %in% input$select1,] 
     } 
     if (input$select2 != "..."){ 
     data <- data[data$column2 %in% input$column2,] 
     } 
data}) 
関連する問題