Shiny R: Фильтровать кадр данных по двум переменным и запустить модель - PullRequest
0 голосов
/ 07 мая 2018

Как я могу отфильтровать строки фрейма данных по нескольким переменным, запустить модель в преобразованном фрейме данных и отобразить результаты?

Я выяснил, как просто отфильтровать фрейм данных по нескольким переменным и отобразить в виде таблицы:

server <- function(input, output) {
  output$summary <- renderTable({  
  df <- Heating

  if (input$regiontype != "All") {
    df <- df[df$region == input$regiontype,]
  }
  if (input$roomsize != "All") {
    df <- df[df$rooms == input$roomsize,]
  }

  df
  })
}

Я также выяснил, как отфильтровать фрейм данных по одной переменной , запустить модель и распечатать результаты:

#### PART 3 - Define server logic
server <- function(input, output) {

  output$summary <- renderPrint({

    df <- Heating

    ### Subset data
    df.subset <- reactive({ a <- subset(df, region == input$regiontype)
    return(a)})

    ### Model 
    estimates <- mlogit(depvar ~ ic + oc | 0, data= df.subset(), shape = "wide", choice = "depvar", varying = c(3:12))
    summary(estimates)

  })      
}

Но как мне объединить их, чтобы запустить модель во фрейме данных, который был отфильтрован по одной или нескольким переменным?

Я предоставлю обе версии скрипта ниже: 1. Отфильтруйте фрейм данных по нескольким переменным

### PART 1 - Load Libraries and Data
library(shiny)           # For running the app
library(mlogit)

#### data
data("Heating", package = "mlogit")

#### PART 2 - Define User Interface for application
ui <- fluidPage(

  ## Application title
  titlePanel("Housing Preference"),

  ## Sidebar with user input elements
  sidebarLayout(
    sidebarPanel(
      p("Select the inputs"), # Header
      #Reg
      selectInput('regiontype', 'Region', choices = c("All",
                                                      "Northern coastal region"= "ncostl", 
                                                      "Southern coastal region" = "scostl", 
                                                      "Mountain region"  = "mountn",
                                                      "Central valley region"= "valley") #, 
                  #multiple=TRUE, 
                  #selectize=TRUE
      ),

      #Room Size
      selectInput('roomsize', 'Room Size', choices = c("All",
                                                       "2"= 2, 
                                                       "3" = 3, 
                                                       "4"  = 4,
                                                       "5"= 5 ,
                                                       "6"=6,
                                                       "7"=7)
                  #multiple=TRUE, 
                  #selectize=TRUE
      )



    ),

    ## Show a plot
    mainPanel(
      tableOutput("summary")
    )
  )
)

#### PART 3 - Define server logic
  server <- function(input, output) {
    output$summary <- renderTable({  
      df <- Heating

      if (input$regiontype != "All") {
        df <- df[df$region == input$regiontype,]
      }
      if (input$roomsize != "All") {
        df <- df[df$rooms == input$roomsize,]
      }

      df
    })
  }

### PART 4 - Run the application 
shinyApp(ui = ui, server = server)

2. Отфильтруйте по одной переменной, запустите модель и напечатайте результаты:

### PART 1 - Load Libraries and Data
library(shiny)           # For running the app
library(mlogit)

#### data
data("Heating", package = "mlogit")

#### PART 2 - Define User Interface for application
ui <- fluidPage(

  ## Application title
  titlePanel("Housing Preference"),

  ## Sidebar with user input elements
  sidebarLayout(
    sidebarPanel(
      p("Select the inputs"), # Header
      #Reg
      selectInput('regiontype', 'Region', choices = c("All",
                                                      "Northern coastal region"= "ncostl", 
                                                      "Southern coastal region" = "scostl", 
                                                      "Mountain region"  = "mountn",
                                                      "Central valley region"= "valley") #, 
                  #multiple=TRUE, 
                  #selectize=TRUE
      ),

      #Room Size
      selectInput('roomsize', 'Room Size', choices = c("All",
                                                       "2"= 2, 
                                                       "3" = 3, 
                                                       "4"  = 4,
                                                       "5"= 5 ,
                                                       "6"=6,
                                                       "7"=7)
                  #multiple=TRUE, 
                  #selectize=TRUE
      )



    ),

    ## Show a plot
    mainPanel(
      verbatimTextOutput("summary")
    )
  )
)

#### PART 3 - Define server logic
server <- function(input, output) {

  output$summary <- renderPrint({

    df <- Heating

    ### Subset data
    df.subset <- reactive({ a <- subset(df, region == input$regiontype)
    return(a)})

    ### Model 
    estimates <- mlogit(depvar ~ ic + oc | 0, data= df.subset(), shape = "wide", choice = "depvar", varying = c(3:12))
    summary(estimates)

  })      
}

### PART 4 - Run the application 
shinyApp(ui = ui, server = server)

1 Ответ

0 голосов
/ 07 мая 2018

Вы можете объединить их так:
Я предпочел dplyr способ фильтрации только потому, что чувствую себя более комфортно.

output$summary <- renderPrint({
                            region_type_selected <- input$regiontype
                            room_size_selected <- input$roomsize

                            ### Subset data
                            library(dplyr)
                            if(region_type_selected != "All"){
                                            df <- Heating %>% filter(region == region_type_selected)               
                            }

                            if(room_size_selected != "All"){
                                            df <- Heating %>% filter(rooms == room_size_selected)               
                            }

                            ### Model 
                            estimates <- mlogit(depvar ~ ic + oc | 0, data= df, shape = "wide", choice = "depvar", varying = c(3:12))
                            summary(estimates)

            })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...