【问题标题】:reactivity in timevis package: passing selectinput variable to subgrouptimevis 包中的反应性:将 selectinput 变量传递给子组
【发布时间】:2020-11-07 08:48:09
【问题描述】:

在 R 中使用 timevis 包 (dean attali) 我想使用 r shiny 中的 selectinput 小部件按组单独绘制时间线:错误:无法对不存在的列进行子集化。 x 列 2 不存在。有人可以帮忙吗?谢谢

我的代码:

library(shiny)
library(timevis)
library(dplyr)



# constructing data frame
pre_data <- data.frame(
  group      = as.integer(c(1,1,2,2)),
  content = c("Item one", "Item two",
              "Ranged item", "Ranged item two"),
  start   = c("2016-01-10", "2016-01-11",
              "2016-01-20", "2016-02-14"),
  end     = c(NA, NA, "2016-02-04", "2016-05-14")
)

# preparing for timevis
data <- pre_data %>% 
  arrange(group, start) %>% 
  group_by(group) %>% 
  mutate(id = row_number())


ui <- fluidPage(
  # selectinput getting data from dataframe
  selectInput(inputId = "group", 
              label = "group", 
              choices = data$group),
  timevisOutput("timeline")
)

server <- function(input, output, session) {
  
  # reactive input variable
  var_group <- reactive({input$group})
  
  # 
  output$timeline <- renderTimevis({
    select(data, all_of(c(var_group()))) %>% 
    timevis(data)
  })
}

shinyApp(ui = ui, server = server)

【问题讨论】:

    标签: r dplyr reactive timeline shiny-reactivity


    【解决方案1】:

    所以您想要显示包含第 1 组或第 2 组内容的时间线?然后你需要filter你的group列;你不能 select12 因为它们不存在,1/2 只是 group 列中的值。

    library(shiny)
    library(timevis)
    library(dplyr)
    
    
    
    # constructing data frame
    pre_data <- data.frame(
      group      = as.integer(c(1,1,2,2)),
      content = c("Item one", "Item two",
                  "Ranged item", "Ranged item two"),
      start   = c("2016-01-10", "2016-01-11",
                  "2016-01-20", "2016-02-14"),
      end     = c(NA, NA, "2016-02-04", "2016-05-14")
    )
    
    # preparing for timevis
    data <- pre_data %>% 
      arrange(group, start) %>% 
      group_by(group) %>% 
      mutate(id = row_number())
    
    
    ui <- fluidPage(
      # selectinput getting data from dataframe
      selectInput(inputId = "group", 
                  label = "group", 
                  choices = data$group),
      timevisOutput("timeline")
    )
    
    server <- function(input, output, session) {
      
      # reactive input variable
      var_group <- reactive({input$group})
      
      # 
      output$timeline <- renderTimevis({
        req(var_group())
        data %>% 
          filter(group == as.integer(var_group())) %>% 
          timevis()
      })
    }
    
    shinyApp(ui = ui, server = server)
    

    【讨论】:

    • 谢谢你。完美运行。您对我的浅薄知识做出了重大贡献。
    猜你喜欢
    • 1970-01-01
    • 2015-05-12
    • 2016-05-26
    • 2020-01-22
    • 1970-01-01
    • 2014-02-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多