2015-01-05 1 views
2

R의 shiny 패키지에는 위턱과 아래턱이있는 sliderInput을 사용하는 슬라이더 위젯을 사용할 수 있습니다.In R Shiny 슬라이더 입력 값을 분리하고 필터링하는 방법

나는 상한값과 하한값을 분리하고 데이터 열을 필터링하여 해당 데이터를 UI.R으로 전달할 수 있기를 바랍니다. 예를 들어

:

Server.R

library(shiny) 
data <- read.csv('some_data_to_filter.csv') 

# Define server logic for slider examples 
shinyServer(function(input, output) { 

    # Reactive expression to compose a data frame containing all of 
    # the values 
    sliderValues <- reactive({ 

    # Compose data frame 
    data.frame(
     Name = c("Range"), 
     Value = as.character(c(paste(input$range, collapse=' '),)), 
     stringsAsFactors=FALSE) 
    }) 

    # Show the values using an HTML table 
    output$values <- renderTable({ 
    sliderValues() 
    }) 
}) 

UI.R

예에서는
library(shiny)  
# Define UI for slider demo application 
shinyUI(fluidPage(

    # Application title 
    titlePanel("Sliders"), 

    sidebarLayout(
    sidebarPanel(  
    # Specification of range within an interval 
     sliderInput("range", "Range:", 
        min = 1, max = 1000, value = c(200,500)) 
), 

    # A table summarizing the values entered 
    mainPanel(
     tableOutput("values") 
    ) 
) 
)) 

I 데이터 판독 및 상기 I는 슬라이더를 가지고 하지만 거기에있는 것처럼 데이터 필터링은 없습니다.

은 분할 및 필터하기 위해 최선을 시도했지만, 그것은 오류가 발생합니다 :

나는 당신의 질문을 이해하면
myrange <- reactive({ data.frame(strsplit(Value = input$slider))}) 
data <- data[data$colname <= as.numeric(myrange[2]),] 
data <- data[data$colname >= as.numeric(myrange[2]),] 
+0

가 왜 문자 벡터 아닌'strsplit''입력 $의 slider'에 필요 샘플 데이터와 아래의 솔루션을 사용? –

+0

아이디어는 생성 된 문자열을 슬라이더 범위로 분할하는 것입니다. 슬라이더 객체에 의해 생성 된 범위/문자열은 다음과 같습니다 : "50 100"'. 'data.frame (unlist (strsplit())) '을 사용하여 이것을 보통 R의 벡터 요소들로 변환 할 수 있습니다. 그러나 이것이 반응 적이라는 사실은 사물을 복잡하게 만듭니다. 두 개의 숫자를'input $ slider'에서 분리하여 데이터를 부분 집합 화하는 데 사용할 수있는 방법을 알고 있습니까? –

+1

정말 필요하다고 생각하지 않습니다. 'input $ range'는 이미 최소값과 최대 값을 포함하는 길이가 2 인 숫자 벡터입니다. 'num [1 : 2] 200 614'. 즉'input $ range [1]'과'input $ range [2]'는 왼쪽과 오른쪽 슬라이더 값을 줄 것입니다. –

답변

3

잘 당신이 바로 슬라이더 입력의 두 가지 기준에 따라 데이터를 부분 집합하고자합니다. 그렇다면,

rm(list = ls()) 
library(shiny) 

# Sample Data 
area <- seq(from=10,to=100, by=10);peri <- seq(from=2710.1,to=2800.1, by=10) 
shape <- seq(from=0.1,to=1, by=0.1);perm <- seq(from=1,to=100, by=10) 
my_data <- as.data.frame(cbind(area,peri,shape,perm)) 

ui = fluidPage(
    sidebarPanel(sliderInput("range", "Select Range",min = 1, max = 10, value = c(2, 5)),width = 3), 
    mainPanel(tableOutput("view")) 
) 

server = function(input, output) { 
    output$view <- renderTable({ 
    test <- my_data[input$range[1]:input$range[2],] 
    test},include.rownames=FALSE) 
} 
runApp(list(ui = ui, server = server))