首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ggvis &ggvis动态选择数据子集

ggvis &ggvis动态选择数据子集
EN

Stack Overflow用户
提问于 2015-05-31 15:50:53
回答 2查看 753关注 0票数 1

如何选择数据的一个子集并使用shiny & ggvis绘制它?由于ggvis 文档状态,无法使用ggvis input_select交换数据集。除了这个限制之外,如果数据预处理和过滤只能执行一次,那就太棒了。这是我使用selectInput()的尝试。我希望能够选择要显示的部件或整个数据集。

代码语言:javascript
复制
library(ggvis)
library(dplyr)


set.seed(1233)
cocaine <- cocaine[sample(1:nrow(cocaine), 500), ]

shinyServer(function(input, output, session) {

  output$choose_dataset <- renderUI({
    selectInput("dataset", "Select", append("Give me all!", as.list(sort(unique(cocaine$state)))))
  })

    if(input$dataset != "Give me all!"){
     a <- filter(rawData, cocaine$state == input$dataset)
  }
  if(input$dataset == "Give me all!"){
     a <- cocaine
  }
  a$id <- 1:nrow(a)
  return(a)

    datFiltered %>%
    ggvis(~weight, ~price, key := ~id) %>%
    bind_shiny("plot1") # Very important!
})

这是UI

代码语言:javascript
复制
library(ggvis)

shinyUI(bootstrapPage(
  uiOutput("choose_dataset"),
  ggvisOutput("plot1")
  ))
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-31 23:07:53

您的代码有一些问题,没有运行.为什么要从主服务器函数返回?而且您使用的是两个变量dataFilteredrawData,它们没有在任何地方定义。

这是你想要做的事情的解决方案

代码语言:javascript
复制
runApp(shinyApp(
  ui = fluidPage(
    uiOutput("choose_dataset"),
    ggvisOutput("plot1")
  ),
  server = function(input, output, session) {
    output$choose_dataset <- renderUI({
      selectInput("dataset", "Select", append("Give me all!", as.list(sort(unique(cocaine$state)))))
    })

    observeEvent(input$dataset, {
      if(input$dataset == "Give me all!"){
        data <- cocaine
      } else {
        data <- filter(cocaine, cocaine$state == input$dataset)
      }
      data$id <- seq(nrow(data))

      data %>%
        ggvis(~weight, ~price, key := ~id) %>%
        layer_points() %>%
        bind_shiny("plot1") 
    })


  }
))

请尝试张贴可以运行的代码,或者至少在代码中注明哪些不运行,哪些变量需要定义,等等:)

票数 3
EN

Stack Overflow用户

发布于 2015-06-03 15:17:57

@daattali -我对你的解决方案有一个改进建议。在observeEvent中使用过滤器,这会将NA引入解决方案,并导致事件不正确地触发。相反,使用子集,如下所示:

代码语言:javascript
复制
runApp(shinyApp(
  ui = fluidPage(
    uiOutput("choose_dataset"),
    ggvisOutput("plot1")
  ),
  server = function(input, output, session) {
    output$choose_dataset <- renderUI({
      selectInput("dataset", "Select", append("Give me all!", as.list(sort(unique(cocaine$state)))))
    })

    observeEvent(input$dataset, {
      if(input$dataset == "Give me all!"){
        data <- cocaine
      } else {
        data <- subset(cocaine, cocaine$state == input$dataset)
      }
      data$id <- seq(nrow(data))

      data %>%
        ggvis(~weight, ~price, key := ~id) %>%
        layer_points() %>%
        bind_shiny("plot1")
    })


  }
))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30559374

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档