【问题标题】:How to filter Date (Year) in shiny based on sliderInput choice?如何根据滑块输入选择过滤闪亮的日期(年份)?
【发布时间】:2019-01-09 09:00:39
【问题描述】:

我正在使用 shiny 并且在我的 ui.R 文件中有一个 sliderInput() 和 selectInput()。我希望根据用户对这两个字段的选择,在 hchart 函数中绘制所选数据。我非常接近解决问题,但是使用我的代码,它只是过滤年份的第一个数字和最后一个数字,而不是两者之间的所有内容。我尝试了 between 函数,但没有成功。

这是我的 ui.R 代码:

  tabItem(tabName = "crimetypesbyyear",

          fluidRow(

            box(
              title = "Date", 
              status = "primary", 
              solidHeader = TRUE,
              width = 6,
              sliderInput("ctypeDate", label = "Select Year", min = 2001, max = 2016, step = 1, sep = '', value = c(2001,2016))
            ),

            box(
              title = "Crime Type", 
              status = "primary", 
              solidHeader = TRUE,
              width = 6,
              height = 162,
              selectInput("ctypeCrimeType", label= "Select Crime Type", choices = unique(cc$Primary.Type)) 
            ),

            box(
              title = "Plot", 
              status = "danger", 
              solidHeader = TRUE,
              width = 12,
              highchartOutput(outputId = "ctypeOutput")
            ),

这是我的 server.R 代码:

output$ctypeOutput <- renderHighchart({

ctypeAnalysis <- cc[cc$Primary.Type == input$ctypeCrimeType,] %>% group_by(Year2) %>% summarise(Total = n()) %>% filter(Year2 %in% cbind(input$ctypeDate[1],input$ctypeDate[2]))

hchart(ctypeAnalysis %>% na.omit(), "column", hcaes(x = Year2, y = Total, color = Total)) %>%
hc_exporting(enabled = TRUE, filename = paste(input$ctypeCrimeType, "by_Year", sep = "_")) %>%
hc_title(text = paste("Crime Type by Year",input$ctypeCrimeType, sep = ": ")) %>%
hc_subtitle(text = "(2001 - 2016)") %>%
hc_xAxis(title = list(text = "Year")) %>%
hc_yAxis(title = list(text = "Crimes")) %>%
hc_colorAxis(stops = color_stops(n = 10, colors = c("#d98880", "#85c1e9", "#82e0aa"))) %>%
hc_add_theme(hc_theme_smpl()) %>%
hc_legend(enabled = FALSE)
})

所以这行代码应该更正:ctypeAnalysis &lt;- cc[cc$Primary.Type == input$ctypeCrimeType,] %&gt;% group_by(Year2) %&gt;% summarise(Total = n()) %&gt;% filter(Year2 %in% cbind(input$ctypeDate[1],input$ctypeDate[2])),有人知道吗?

【问题讨论】:

    标签: r highcharts filter shiny filtering


    【解决方案1】:

    由于Year 2 被格式化为一个因子,您需要将其转换回数值。您可以在与过滤功能相同的步骤中执行此操作,如下所示:

    ... filter(as.numeric(levels(Year2))[Year2] >= input$ctypeDate[1] & as.numeric(levels(Year2))[Year2] <= input$ctypeDate[2])
    

    【讨论】:

    • 感谢您的快速回答。我忘了写我已经尝试过了,但是得到了这个错误:Warnung: E​​rror in [[
    • 如果您可以提供一些示例数据(使用 dput()),我或其他人可能会遇到更多麻烦。但如果没有它,就很难知道为什么您没有通过过滤器获取数据。
    • 输出太大了,兄弟.. Year2 列仅以 4 位格式表示犯罪发生的年份(2001...)。 class= 因子
    • @S002,啊...知道Year2 实际上被格式化为一个因素是有用的信息。请参阅上面我编辑的答案
    • phalteman,你是天才兄弟
    猜你喜欢
    • 1970-01-01
    • 2020-07-20
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 2017-11-25
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    相关资源
    最近更新 更多