r-使用pickerInput过滤器处理NA值



我正在开发一个闪亮的应用程序,它有一个反应性df,我正在使用它来渲染dt数据表。我的问题是,在我的侧边栏pickerInput过滤器上,我正在使用:

choices = unique(COLUMN_NAME)

当列中有CCD_ 2值变为"0"时;NA";在过滤器上,所以当我使用时:

filter(COLUMN_NAME %in% input$column_name)

在反应性df中,NA值没有正确过滤。最好的办法是什么?我应该将任何NA值重新编码为字符串,还是应该修复侧边栏过滤器,使NA过滤为真正的NA值?

我认为最好将NA作为特例,即将其视为缺失值,而不是character。这是因为在R中(你在R中计算(NA是一个公认的对象,所以当把它作为NA(缺失值(留在数据帧中时,你可能会获得很多优势(比如速度(。

但这是真的,JavaScript没有NA这样的构造,所以我们最终得到了字符类型:

jsonlite::toJSON(c(1, NA, 2))
#> [1,"NA",2]

假设:

  • 您正在使用data.frame(您想要过滤data.frame(,并且您使用dplyr::filter(非常重要,因为在默认情况下,如果您按已知值进行过滤,则会删除丢失的值,这与c(1, NA)[c(1, NA) == 1]中不同,在CCD_10中将保留NA值(

你可以试试这样的东西:

library(shiny)
library(dplyr)
is_val <- function(value, set) {
if (all(value == "NA")) {
is.na(set)
} else {
if (any(value == "NA")) {
set %in% value | is.na(set)
} else {
set %in% value
}
}
}
choices <- data.frame(col = c(1, NA, 2, 1, 3, 1, 2))

ui <- fluidPage(
selectInput("column_name", "Choose", choices = unique(choices$col), multiple = TRUE),
tableOutput("display_val")
)
server <- function(input, output, session) {
output$display_val <- renderTable({
req(input$column_name)
choices |> 
filter(is_val(input$column_name, col))
})

}
shinyApp(ui, server)

关键当然是函数is_val;是否由用户拾取。如果pickerInput没有multiple = TRUE,这个代码可能会简单一点。

最新更新