problema con mutate no actualiza la columna con la variable

al momento de modificar los nulos de un data frame con mutate, al colocar el nombre de la columna con la variable que se seleccione esta no la reconoce; sino crea una columna con el nombre de la variable y coloca el contenido de esa columna seleccionada

##ui-------------
library(shiny)
library(shinydashboard)
library(DT)
library(ggplot2)
library(tidyverse)
library(psych)
ui <- dashboardPage(
  
  dashboardHeader(
  ),#header
  
  
  dashboardSidebar(width = 250, disable = F,
                   
                     fluidPage( 
                       
                       sidebarMenu( 
                         menuItem("Carga",tabName = "carga"),
                         menuItem( "Modificar nulos",tabName = "mod")
                      
                         ) 
                     )
                   
  ), #sidebar
  dashboardBody(
    
    fluidPage(
      
      tabItems(
        
        tabItem(tabName = "carga",
                navbarPage("Menú de carga",
                           tabPanel("Ingreso",
                                    h3("Carga de Datos"),
                                    tags$hr(),
                                    fluidRow(
                                      column(5,
                                             selectInput("separador",
                                                         h4("Separador"),
                                                         choices = list(" , " = ",",
                                                                        " ; " = ";",
                                                                        "Seleccione una opción"= 3
                                                         ),
                                                         selected = 3
                                             ),
                                             # tags$hr(),
                                             checkboxInput("header", "Encabezado", TRUE)
                                             
                                      ),
                                      column(5,
                                             fileInput("fichero",
                                                       h4("Archivo"),
                                                       buttonLabel = "Fichero",
                                                       placeholder = "selecciona un fichero",
                                                       accept = c(
                                                         "text/csv",
                                                         "text/comma-separated-values,text/plain",
                                                         ".csv"
                                                       ),
                                                       multiple = F)
                                      )
                                    )
                           ), #tabpanel ingreso
                           tabPanel("Tabla", 
                                    box( height = "500",width = "15",solidHeader = T, 
                                         
                                         DT::dataTableOutput("tablaCargar"),style = "height:500px; overflow-y: scroll;overflow-x: scroll;"
                                         
                                    )
                                    
                           )#tabpanel tabla
                )#navbar
        ),#carga
        ###---------------------------------------------------------------------------------------------------------
     
      
        #####-----------------------------------------------------------------------------------------------------------
        tabItem(tabName = "mod",
                h3("Modificar elementos nulos"),
                sidebarLayout(
                  sidebarPanel(
                    uiOutput("uimod"),
                    hr(),
                    selectInput("resumen",
                                h4("Elegir termino"),
                                choices = list("Seleccione una opción"= 3, 
                                               " Minimo" = "min",
                                               " Mediana " = "median",
                                               " Media" = "mean",
                                               " Maximo " = "max"
                                               
                                               
                                ),
                                selected = 3
                    )
                    
                  ),
                  mainPanel(
                    tabsetPanel(
                      id = 'datasetmod',
                      tabPanel("Modificar", 
                               br(),
                               box( height = "500",width = "15",solidHeader = T,
                                    dataTableOutput("tablaMod"),style = "height:500px; overflow-y: scroll;overflow-x: scroll;"
                               )
                               
                      )
                    )
                  )
                )
        ),
        
       
        ######----------------------------------------------------------------------------------------------------------
        tabItem(tabName = "gra",
                tabPanel("grafica",
                         h4("Grafica"),
                         sidebarLayout(
                           sidebarPanel(
                             uiOutput("uigra")
                           ),
                           mainPanel(
                             tabsetPanel(
                               id = 'datasetGra',
                               tabPanel("Grafica", 
                                        plotOutput("plot1")
                               )
                             )
                           )
                         )
                )
        )#grafica
        #######------------------------------------------------------------------------
      )#items
    )#fluidpage
  )#body
  
)



##SERVIDOR-------


server <- function(input, output, session) {
  
  ####-------------render de fileInput  archivo 
  
  archivo1 <- reactive({
    file <- input$fichero
    if (is.null(file)|| input$separador == 3)
      return(NULL)
    archivo <- read.csv(file$datapath, 
                        sep = input$separador,
                        header = input$header,
                        na = c("", "NA"),
                       
    )
    
  })
  
  
  ####---------render de tabla cargar
  
  output$tablaCargar <- renderDataTable({
    archivo1()
  })
  


  
  ####------------ render seleccion col a modificar
  
  output$uimod <- renderUI({
    
    # conditionalPanel(
    #   condition = 'input.datasetmod === "Modificar"',
      selectInput("variablesMod", "Selección de columna",
                  names(archivo1()), multiple = F)
    #)
    
  })
  
  archivo2 <- reactive({
    columna <- input$variablesMod
    cambio <- input$resumen
    if (is.null(columna)) {
      return(NULL)
    }
    ###
    ### problema no selecciona la variable columna, crea otra tabla con el nombre columna
    a <-archivo1() %>%  mutate(columna = replace_na(archivo1()[,columna],cambio))
  })
  
  output$tablaMod <- renderDataTable({
   archivo2() 
  })
  
  
  
}

shinyApp(ui, server)

mutate() is interpreting columna as a symbol, not as a character string, the syntax you are trying to use is too ambiguous, you would have to do something like this instead.

library(shiny)
library(tidyverse)

ui <- fluidPage(
    titlePanel("My question"),
    sidebarLayout(
        sidebarPanel(
            selectInput(inputId = "selectedvariable",
                        label = "Select a variable",
                        choices = names(iris))
        ),
        mainPanel(
            DT::dataTableOutput("table")
        )
    )
)

server <- function(input, output) {
    output$table <- DT::renderDataTable({
        iris %>% 
            mutate(!!sym(input$selectedvariable) := !!sym(input$selectedvariable) / 100) %>% 
            head(5)
    })
}

shinyApp(ui = ui, server = server)

Note: Please try to make your questions in English, since it is the preferred language here and by using Spanish you are excluding most people from the conversation, thus lowering your chances of getting help.

1 Like

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.