valores vacio seleccionar funcion filas extraer eliminar data crear contar columnas columna agregar r dataframe shiny

vacio - Brillante: construcción dinámica de dataframe; renderUI, observe, valores reactivos



funcion subset en r (2)

Creo que la cuestión de cómo subconjuntos dinámicamente de datos utilizando la funcionalidad renderUI de Shiny aparece de vez en cuando, pero me cuesta entender cuándo usar renderUI (con uiOutput) sobre otras funcionalidades, incluidas las de observación, reactivas, reactivas y hasta condicionalPanel.

Me gustaría construir un marco de datos totalmente interactivo en el que cada opción influya en lo que puede elegir en las otras entradas. Para este ejemplo, tendremos un selectInput (single), selectInput (multi) y un sliderInput (con max & min).

La selección principal, Categoría 1, puede ser cualquier valor en la Categoría 1 o "Todos". Al seleccionar algo en la Categoría 1, usted a su vez influye en lo que se puede mostrar en la Categoría 2 y en el rango de valores en el control deslizante. Al elegir primero la Categoría 2, restringe las opciones de Categoría 1 y también los valores en el control deslizante (que siempre representan el máximo y el mínimo del subconjunto). Al comenzar con SliderInput, la Categoría 1 y la Categoría 2 son limitadas si ninguno de sus datos cae en el rango que usted indicó.

NB, incorporaré un botón de acción ''reiniciar'' para restablecer el marco de datos a lo que es cuando la aplicación se inicializa.

un intento de usar algunos datos ficticios, que no he podido conseguir trabajando. Esto se subdividirá en la Categoría 1 y actualizará el control deslizante, pero cambiar la Categoría 2 no sobrescribirá la tabla procesada;

require(shiny) data <- data.frame(Category1 = rep(letters[1:3],each=15), Info = paste("Text info",1:45), Category2 = sample(letters[15:20],45,replace=T), Size = sample(1:100, 45), MoreStuff = paste("More Stuff",1:45)) ui <- fluidPage( titlePanel("Test Explorer"), sidebarLayout( sidebarPanel( uiOutput("category1"), uiOutput("category2"), uiOutput("sizeslider") ), mainPanel( tableOutput("table") ) ) ) server <- function(input, output,session) { df_subset <- reactive({ if(input$cat1=="All") {df_subset <- data} else{df_subset <- data[data$Category1==input$cat1,]} }) df_subset1 <- reactive({ if(is.null(input$cat2)){df_subset()} else {df_subset()[df_subset()$Category2==input$cat2,]} }) output$category1 <- renderUI({ selectizeInput(''cat1'', ''Choose Cat 1'', choices = c("All",sort(as.character(unique(data$Category1)))),selected = "All") }) output$category2 <- renderUI({ selectizeInput(''cat2'', ''Choose Cat 2 (optional):'', choices = sort(as.character(unique(df_subset1()$Category2))), multiple = TRUE,options=NULL) }) output$sizeslider <- renderUI({ sliderInput("size", label = "Size Range", min=min(df_subset1()$Size), max=max(df_subset1()$Size), value = c(min(df_subset1()$Size),max(df_subset1()$Size))) }) output$table <- renderTable({ df_subset1() }) } shinyApp(ui, server)


Me gustaría agregar una nueva categoría que se puede elegir variable. ¿Voy en la dirección correcta?

Data <- reactive({ if(input$table == "All"){df_subset <- data} else{df_subset <- data[,input$show_vars,drop=FALSE]} })


Un poco complicado seguir lo que está sucediendo, sin embargo, ¿es esto lo que quieres? La nota cambió el reactive en eventReactive por lo que está específicamente vinculado a una input . También utilicé el operador %in% para tener selecciones múltiples para su selectizeInput

Editar: en tu primer código ni siquiera utilizas el control deslizante, lo agregué al filtrado

#rm(list = ls()) library(shiny) data <- data.frame(Category1 = rep(letters[1:3],each=15), Info = paste("Text info",1:45), Category2 = sample(letters[15:20],45,replace=T), Size = sample(1:100, 45), MoreStuff = paste("More Stuff",1:45)) ui <- fluidPage( titlePanel("Test Explorer"), sidebarLayout( sidebarPanel( uiOutput("category1"), uiOutput("category2"), uiOutput("sizeslider") ), mainPanel( tableOutput("table") ) ) ) server <- function(input, output,session) { output$category1 <- renderUI({ selectizeInput(''cat1'', ''Choose Cat 1'', choices = c("All",sort(as.character(unique(data$Category1)))),selected = "All") }) df_subset <- eventReactive(input$cat1,{ if(input$cat1=="All") {df_subset <- data} else{df_subset <- data[data$Category1 == input$cat1,]} }) df_subset1 <- reactive({ if(is.null(input$cat2)){df_subset()} else {df_subset()[df_subset()$Category2 %in% input$cat2,]} }) output$category2 <- renderUI({ selectizeInput(''cat2'', ''Choose Cat 2 (optional):'', choices = sort(as.character(unique(df_subset()$Category2))), multiple = TRUE,options=NULL) }) output$sizeslider <- renderUI({ sliderInput("size", label = "Size Range", min=min(df_subset1()$Size), max=max(df_subset1()$Size), value = c(min(df_subset1()$Size),max(df_subset1()$Size))) }) df_subset2 <- reactive({ if(is.null(input$size)){df_subset1()} else {df_subset1()[df_subset1()$Size >= input$size[1] & df_subset1()$Size <= input$size[2],]} }) output$table <- renderTable({ df_subset2() }) } shinyApp(ui, server)