R 条件筛选在应用程序中不起作用

R 条件筛选在应用程序中不起作用,r,shiny,R,Shiny,我正在R中构建一个闪亮的应用程序,它将:I)使用两个单选按钮过滤数据集,ii)绘制过滤后的数据集,以及iii)使用刷点识别异常点以供进一步检查 下面是我的数据集的简短版本以及闪亮的代码。基于第一个单选按钮的过滤似乎工作正常。然而,车轮在第二次无线电对接的基础上通过滤波从总线上脱落。我正在尝试设置代码,以便绘制第二个单选按钮的值,但这没有发生,我还没有找出问题所在 这就是我认为问题所在…但我现在不知所措 plot_subset_df <- reactive({ filter(sub_

我正在R中构建一个闪亮的应用程序,它将:I)使用两个单选按钮过滤数据集,ii)绘制过滤后的数据集,以及iii)使用刷点识别异常点以供进一步检查

下面是我的数据集的简短版本以及闪亮的代码。基于第一个单选按钮的过滤似乎工作正常。然而,车轮在第二次无线电对接的基础上通过滤波从总线上脱落。我正在尝试设置代码,以便绘制第二个单选按钮的值,但这没有发生,我还没有找出问题所在

这就是我认为问题所在…但我现在不知所措

plot_subset_df <- reactive({
    filter(sub_react$data, CODE == input$CODE & DAYS_DIFFERENCE <= input$DAYS_DIFFERENCE)})
代码的当前版本

library(DT)
library(dplyr)
library(tidyr)
library(ggplot2)
library(shiny)

# Setup data set
sub$NUMBER = as.factor(sub$NUMBER)

# Shiny code
ui <- fluidPage(
  
  sidebarPanel(
  
    radioButtons("CODE", "SWMMP code",
                 choices = unique(sub$CODE)),
    radioButtons("DAYS_DIFFERENCE", "Days difference",
                 choices = c("0" = 0,
                             "3" = 3,
                             "7" = 7,
                             "10" = 10,
                             "14" = 14,
                             "20" = 20,
                             "25" = 25,
                             "30" = 30,
                             "All" = 100000))
  ),
  
  mainPanel(
    plotOutput("plot1", brush = "plot_brush"),
    DTOutput("dt_of_brushed_points"),
    verbatimTextOutput("actual_data_brushed"),
    verbatimTextOutput("actual_data_full")))

server <- function(input, output, session) {
  
  # Make data set reactive values
  sub_react = reactiveValues(data = sub)
  
  # Get data for plot
  plot_subset_df <- reactive({
    filter(sub_react$data, CODE == input$CODE & DAYS_DIFFERENCE <= input$DAYS_DIFFERENCE)
  })
  
  # Make plot
  output$plot1 <- renderPlot({
    
    ggplot(plot_subset_df(), aes(x = DEPTH, y = INHA)) + 
      geom_point(aes(size = 5, color = NUMBER))+
      theme(legend.position = "top",
            legend.title = element_blank(),
            panel.background = element_blank(),
            panel.grid.major = element_blank(), 
            panel.grid.minor = element_blank(),
            axis.line = element_line(colour = "black"))
  })
  
  # Display rows of data highlighted in plot
  brushed_df <- reactive({
    brushedPoints(plot_subset_df(), input$plot_brush, xvar = "DEPTH", yvar = "INHA", 
                  allRows = FALSE)})
  
  # Render highlighted data in plot
  output$dt_of_brushed_points = renderDT(brushed_df(), selection = 'none', editable = TRUE)
  
  # Show actual data frame to check edits are correct
  output$actual_data_brushed <- renderPrint({brushed_df()})
  #output$actual_data_full <- renderPrint({sub_react$data})
  
  # Transfer edits from top table to bottom table
  proxy = dataTableProxy('dt_of_brushed_points')
  
  observeEvent(input$dt_of_brushed_points_cell_edit, {
    info = input$dt_of_brushed_points_cell_edit
    str(info)
    i = info$row
    j = info$col
    v = info$value
    row_to_change <-  brushed_df()[i, 1]
    sub_react$data[row_to_change, j] <- isolate(coerceValue(v, sub_react$data[row_to_change, j]))
    replaceData(proxy, sub_react$data, resetPaging = FALSE)})  
  
}

shinyApp(ui, server)
库(DT)
图书馆(dplyr)
图书馆(tidyr)
图书馆(GG2)
图书馆(闪亮)
#设置数据集
sub$编号=组件系数(sub$编号)
#闪亮代码

ui在我看来,问题可能是您的
DAYS\u DIFFERENCE
列中的
NA
s。你可以考虑使用:

plot_subset_df <- reactive({
  filter(sub_react$data, CODE == input$CODE & DAYS_DIFFERENCE %in% 
  c(0:input$DAYS_DIFFERENCE))
})

plot\u subset\u df=
,但在您的代码
中,我认为问题可能是您的
DAYS\u DIFFERENCE
列中的
NA
s。你可以考虑使用:

plot_subset_df <- reactive({
  filter(sub_react$data, CODE == input$CODE & DAYS_DIFFERENCE %in% 
  c(0:input$DAYS_DIFFERENCE))
})

plot\u subset\u df=
,但在您的代码
中,问题是
input$DAYS\u差异
是字符类型。例如,如果将“7”与值1:20进行比较,则仅显示8和9大于7

which(1:20 > "7")
#[1] 8 9
在筛选数据之前,将
输入$DAYS\u DIFFERENCE
更改为数字/整数

plot_subset_df <- reactive({
    filter(sub_react$data, CODE == input$CODE & 
           DAYS_DIFFERENCE >= as.numeric(input$DAYS_DIFFERENCE))
  })
plot_subset_df=as.numeric(输入$DAYS_DIFFERENCE))
})

问题是
输入$DAYS\u差异
是字符类型。例如,如果将“7”与值1:20比较,则仅显示8和9大于7

which(1:20 > "7")
#[1] 8 9
在筛选数据之前,将
输入$DAYS\u DIFFERENCE
更改为数字/整数

plot_subset_df <- reactive({
    filter(sub_react$data, CODE == input$CODE & 
           DAYS_DIFFERENCE >= as.numeric(input$DAYS_DIFFERENCE))
  })
plot_subset_df=as.numeric(输入$DAYS_DIFFERENCE))
})

根据@Ronak Shah的评论:这当然也是事实,我没有注意到这一点。使用
c(0:input$DAYS\u DIFFERENCE)
我不知不觉地将列转换为整数。给这只猫剥皮有很多方法。谢谢你的帮助!保重。根据@Ronak Shah的评论:这当然也是事实,我没有注意到这一点。使用
c(0:input$DAYS\u DIFFERENCE)
我不知不觉地将列转换为整数。给这只猫剥皮有很多方法。谢谢你的帮助!保重。谢谢@Ronak Shah!我没有注意到输入产生了一个字符。保重。谢谢@Ronak Shah!我没有注意到输入产生了一个字符。当心。