2015-10-30 104 views
0

我想收集给定数据集的用户输入。我想插入一列,用户可以确定他们是否想要拥有mtdata集合中的某辆车。这是完全主观的,因为意见因人而异,所以我无法编程。有没有办法追加一个额外的列,可以是一个复选框或下拉菜单,以识别用户“想要拥有的汽车?将用户输入列添加到Shiny

library(shiny) 

shinyApp(ui = shinyUI(fluidPage(

      titlePanel("Interesting Cars"), 

      sidebarLayout(
       sidebarPanel(
       helpText("This is a side bar")), 

       mainPanel(
       tableOutput("view") 
       ) 
      ) 
      )), 
     server = function(input, output) { 

      output$view <- renderTable({ 
       head(mtcars[, 1:4], n = 6) 

      }) 

      }) 
+0

你刚刚在谈论过滤数据到用户想要什么吗? – cdeterman

+0

潜在?但是,每个项目都必须单独选择。我不是在寻找数据表功能,而是在寻找关于数据集的用户意见。 – maloneypatr

+0

也许你可以提供更多的例子来展示你对mtcars数据集的含义。给我们一个例子,说明你定义'有趣'的意思。 – cdeterman

回答

0

这个怎么样,您可以使用DT库。通过添加filter选项,用户可以定义一个希望的不同组成部分,看看什么车过来了。

library(shiny) 
library(DT) 

shinyApp(ui = shinyUI(fluidPage(

    titlePanel("Interesting Cars"), 

    sidebarLayout(
     sidebarPanel(
      helpText("This is a side bar")), 

     mainPanel(
      DT::dataTableOutput("view") 
     ) 
    ) 
)), 
server = function(input, output) { 

    output$view <- DT::renderDataTable({ 
     datatable(mtcars, 
        filter = "top" 
     ) 

    }) 

}) 

编辑

如果确实如此重要以添加另一列来指示它是否“有趣”,那么如果您打算让用户在不同的条件下分配它,那么将会有更多的代码要写入。这是一个只有mpg的例子。这里的基本思想是将数据分配给reactiveValues函数。它可以随意修改。这可以明显改善更多(因为它会继续添加列),但它表明了这个概念。

shinyApp(ui = shinyUI(fluidPage(

    titlePanel("Interesting Cars"), 

    sidebarLayout(
     sidebarPanel(
      helpText("This is a side bar"), 
      uiOutput("mpg"), 
      actionButton("add_label", "Mark Interesting") 
      ), 

     mainPanel(
      DT::dataTableOutput("view") 
     ) 
    ) 
)), 
server = function(input, output) { 

    values <- reactiveValues(
     mydata = mtcars 
     ) 

    output$mpg <- renderUI({ 
     numericInput("mpg_input", "MPG Cutoff?", 
        value = 15 
        ) 
    }) 

    output$view <- DT::renderDataTable({ 
     datatable(values$mydata 
     ) 
    }) 

    observeEvent(input$add_label, { 
     validate(
      need(!is.null(input$mpg_input), "need mpg value") 
     ) 
     values$mydata <- data.frame(values$mydata, 
           Interesting_Flag = 
            ifelse(values$mydata$mpg > input$mpg_input, 
             "Interesting", 
             "Not Interesting")) 
    }) 
}) 
+0

这不是我正在寻找的。我正在寻找添加一个额外的列,用户可以输入一个是/否标志。 – maloneypatr

+0

'DT'包具有行选择功能(如果需要,可以与过滤器选项一起使用)。它与带有复选框的额外列几乎具有相同的效果。 – user5029763

+0

@ user5029763你是正确的,但OP似乎想给一个物理列添加特定的条件。我个人也只是使用过滤器,并点击我想要的。 – cdeterman