2016-09-29 10 views
1

私はユーザーがドロップダウンリストから列名を選択して値を割り当てることによってデータフレームをサブセット化することができる光沢のあるアプリケーションを持っています。以下のスニペットでは、df1はデータフレームであり、ユーザーがドロップダウンから「国」を選択してテキストボックスに「UK」と入力すると、一時的なdf、temp_datには英国の値のみが含まれている必要があります。何らかの理由で、3列の0行が返されたとわかりません。誰か助けてくれますか?前もって感謝します。シャイニー:ユーザー列の入力に基づいて動的にサブセットされたデータ

library(shinydashboard) 
ui = dashboardPage(dashboardHeader(), 
        dashboardSidebar(), 
        dashboardBody(uiOutput("subset_check1"), uiOutput("subsetbox1‌​"))) 

server = function(input, output, session) 
{ 
    names = c("Jane", "Doe", "Job", "Right") 
    emp_id = c(1000, 1001, 1002, 1003) 
    country = c("UK", "UK", "UK", "US") 
    df1 = data.frame(names, emp_id, country) 
    file1_cols = colnames(df1) 
    output$subset_check1 = renderUI(checkboxInput(
    "subcheck1", 
    "Would you like to subset this dataset with a condition?" 
)) 
    observe({ 
    if (!is.null(input$subcheck1)) 
    { 
     if (input$subcheck1 == "TRUE") 
     { 
     #print("box was checked") 
     output$subsetbox1 = renderUI(flowLayout(
      selectInput(
      "subsetbox1sel", 
      "Select column:", 
      choices = c(file1_cols), 
      multiple = T 
     ), 
      textInput("subsetbox1text", "Enter value") 
     )) 
     observe({ 
      if (!is.null(input$subsetbox1sel)) 
      { 
      if (!is.null(input$subsetbox1text)) 
      { 
       cols_sel1 = as.character(input$subsetbox1sel) 
       vals_sel1 = as.character(input$subsetbox1text) 
       temp_dat = df1[df1$cols_sel1 == vals_sel1, ] 
       print(temp_dat) 
      } 
      } 
     }) 
     } 
    } 
    }) 
} 
+0

サブセット(df1、cols_sel1 == vals_sel1)を無駄にしようとしました。私は間違っていることを理解できません。 cols_sel1を印刷するとcountryとvals_sel1が表示されます。英国は文字として表示されます。なぜ、temp_datにはまだ私が期待するデータがないのですか? – rookieJoe

+0

FYI:コードを実行可能にするために、 'library(shinydashbard)'を追加し、uiコードを 'ui = dashboardPage(dashboardHeader()、dashboardSidebar()、dashboardBody(uiOutput(" subset_check1 ")、uiOutput(" subsetbox1 ")))'。 –

+0

お詫び申し上げます。これを反映するために質問を更新しました。 – rookieJoe

答えて

3

現在、データフレームにcols_sel1という名前の列はありません。しかし、文字列リテラル値を渡すつもりです。したがって、ドル$修飾子が、列を参照する文字列を使用していないこのcols_sel1は、ユーザーの選択によって変化し、特に以来(すなわち、以下の後者の使用):

df$col 
df['col'] 

だから、単にあなたのtemp_datラインを調整するには:

temp_dat = df1[df1[cols_sel1]==vals_sel1,] 
+0

@rookieJoeそれは魅力のように働くので、この回答を受け入れてください –

+0

実際それは魅力のように動作します!ありがとうございました@パルフェット。 – rookieJoe

関連する問題