You need to enable JavaScript to run this app. R Shiny应用DAYS_DIFFERENCE维度单选按钮条件筛选失效
优惠活动
大模型
产品
解决方案
定价
更多

R Shiny应用DAYS_DIFFERENCE维度单选按钮条件筛选失效

筛选失效的核心原因
  1. 筛选逻辑与需求完全反向:你的目标是保留DAYS_DIFFERENCE大于等于所选按钮值的记录,但现有代码用的是<=(小于等于)运算符,和目标逻辑完全相悖
  2. NA值未做预处理:数据集中DAYS_DIFFERENCE为NA的行,在与数值比较时会返回NA,直接被filter排除,进一步导致结果与预期偏差
  3. “全部”选项的赋值逻辑不适配大于等于的筛选规则:原来绑定的100000值,在反向筛选(<=)时能正常工作,但在正向筛选(>=)时完全起不到“展示所有记录”的作用
可直接运行的修正方案

调整UI层单选按钮配置

将DAYS_DIFFERENCE的选项适配为正向筛选逻辑,去掉无意义的超大值占位:

radioButtons("DAYS_DIFFERENCE", "Days difference",
             choices = c("展示全部" = -1,
                         "0天及以上" = 0,
                         "3天及以上" = 3,
                         "7天及以上" = 7,
                         "10天及以上" = 10,
                         "14天及以上" = 14,
                         "20天及以上" = 20,
                         "25天及以上" = 25,
                         "30天及以上" = 30),
             selected = -1)

这里把“展示全部”选项绑定为-1,因为数据集中DAYS_DIFFERENCE最小取值为0,选这个值时DAYS_DIFFERENCE >= -1会自动匹配所有有效记录,不需要用超大值做占位。

修正服务端筛选逻辑

与现有代码栈兼容的dplyr版本

plot_subset_df <- reactive({
  sub_react$data |> 
    # 先排除DAYS_DIFFERENCE为NA的无效行
    filter(!is.na(DAYS_DIFFERENCE)) |> 
    filter(
      CODE == input$CODE,
      DAYS_DIFFERENCE >= input$DAYS_DIFFERENCE
    )
})

纯R基础包兼容版本(无第三方依赖)

plot_subset_df <- reactive({
  dat <- sub_react$data
  # 按条件索引筛选行
  dat[
    !is.na(dat$DAYS_DIFFERENCE) & 
    dat$CODE == input$CODE & 
    dat$DAYS_DIFFERENCE >= input$DAYS_DIFFERENCE, 
  ]
})
附带的常见小问题修正
  • 原代码中geom_point的size参数写在aes()内部,会把数值映射为颜色图例的一部分,生成多余的size图例,应将size移到aes外部:
    # 修正前:geom_point(aes(size = 5, color = NUMBER))
    # 修正后:
    geom_point(size = 3, aes(color = NUMBER))
    
  • 刷选函数增加NA兼容参数,避免点丢失:
    brushed_df <- reactive({
      brushedPoints(
        plot_subset_df(), input$plot_brush, 
        xvar = "DEPTH", yvar = "INHA", 
        allRows = FALSE, na.rm = TRUE
      )
    })
    

内容的提问来源于stack exchange,提问作者Vesuccio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.31 20:36:09