2016-09-29 3 views
1

사용자가 드롭 다운 목록에서 열 이름을 선택하고 값을 할당하여 데이터 프레임의 하위 집합을 만들 수있는 반짝이는 응용 프로그램이 있습니다. 아래 스 니펫에서 df1은 데이터 프레임이며 사용자가 드롭 다운에서 "country"를 선택하고 텍스트 상자에 "UK"를 입력하면 임시 df, temp_dat에 UK 값만 있어야합니다. 어떤 이유로 3 열의 0 행이 반환되었음을 이해할 수 없습니다. 누군가가 이걸 도와 줄 수 있습니까? 미리 감사드립니다.Shiny : 사용자 열 입력을 기반으로 동적으로 하위 데이터 집합

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

현재 dataframe에서 cols_sel1라는 이름의 열이 없습니다. 하지만 문자열 리터럴 값을 전달하려고합니다. 따라서, 달러 $ 규정하지만, 열을 참조하는 문자열을 사용하지 않는이 cols_sel1는 사용자의 선택에 따라 달라집니다 특히 이후 (즉, 아래의 후자의 사용) :

df$col 
df['col'] 

그래서 단순히 temp_dat 라인을 조정하려면 :

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

@rookieJoe 매력처럼 작동하므로이 답변을 수락하십시오 –

+0

사실 그것은 매력처럼 작동합니다! 고마워요. – rookieJoe