2016-10-10 4 views
0

나는 dataframe 있습니다필터 dataframe 빛나는

height <- c('100', '101','102') 
weight <- c('40 ', '45', '58') 

df <- data.frame(height, weight) 

df  
    height weight 
1 100  40 
2 101  45 
3 102  58 

이 지금은 예를 들어 100를 검색하고 40을 표시 만들고 싶어, 나는 102 seach 경우 출력이 될 것를 58

예 5의 안양 $ 높이가 아닌 다른 번호를 입력하면 작동하고

df %>% 
    filter(height == input$counter) %>% 
    select(weight) 

은,하지만 난이 얻을 : 나는 다음이

> df %>% 
    filter(height == input$counter) %>% 
    select(weight) 
[1] weight 
<0 rows> (or 0-length row.names) 

input$counterui.R 입력입니다. 결과는 빛나는 결과를 낳았지만 높이가 df 인 입력이 없으면 numeric(0)이 표시됩니다. numeric(0) 대신에 출력이 0 인 것을 어떻게 만들 수 있습니까?

답변

0

경고 :

어떻게 출력이 0 대신 것을 그것을 만들 수 있습니다 숫자 (0)

  1. 결과를 0으로 설정 하시겠습니까? 필터 값으로 100을 사용하는 경우 df %>% filter(height == 100) %>% select(weight)의 결과는 data.frame입니다. 아니 num.
  2. data.frame(weight = 0)을 0 대신 사용하더라도 options(stringsAsFactors = FALSE)을 기본값으로 사용하지 않을 경우 문제가 발생할 수 있습니다.

솔루션 :

질문에 요청한대로 당신이 NUM 0 고집 줄 경우 기능을 소개하는 것

:

zero_if_empty <- function(val){ if(dim(val)[1]==0) 0 else val }

또는 발터 제안과 유사 :

zeroDF_if_empty <- function(val){ if(dim(val)[1]==0) data.frame(weight = 0) else val }

(210)

귀하의 예제에서 발생한 문은 변경 될 것 같은 :

df %>% filter(height == input$counter) %>% select(weight) %>% zeroDF_if_empty()

0

이 가능한 솔루션입니다 :

# library 
    library(shiny) 
    library(dplyr) 
    # data frame 
    height <- c('100', '101','102') 
    weight <- c('40 ', '45', '58') 
    df <- data.frame(height, weight) 


    ui <- shinyUI(fluidPage(


     titlePanel("Filter data frame"), 


     sidebarLayout(
      sidebarPanel(
      textInput("counter", 
         "Select:" 
         ) 
     ), 


      mainPanel(
      verbatimTextOutput("selectedData") 
     ) 
     ) 
    )) 

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

     output$selectedData <- renderPrint({ 
      if (input$counter %in% df$height) { 
        df %>% filter(height == input$counter) %>% 
       select(weight) 
      } else { 
        return(data.frame(weight = 0)); 
      } 
     }) 
    }) 


    shinyApp(ui = ui, server = server)