Добавить Выбрать столбцы динамически в R с завершением_с в Shiny App - PullRequest
0 голосов
/ 18 октября 2018

Используя stackoverflow, я создал блестящее приложение, которое загружает CSV-файл и затем отображает данные.

После выбора столбцов динамически , где некоторые столбцы имеют " _down " конец.

Мне требуется помощь в сокращении кадра данных (как в приведенном ниже коде), а также в удалении дубликатов по столбцу идентификатора (если имеется).

    # install.packages("shiny")
    # install.packages("DT")
    # install.packages("shinycssloaders")
    library(DT)
    library(shiny)
    library(shinycssloaders)

Код пользовательского интерфейса

    ##Creating the UI as a fluidPage,
    ##fluidPage allows scaling components of the browser in realtime to fill all available broswer width
    ##This is standard
    ui <- fluidPage(

      # Title of app
      titlePanel("Upload file to table"),


        # Main panel for displaying outputs
        mainPanel(

          #fileInput with acceptance of text/csv and more
          fileInput('file', 'Choose file to upload',
                    accept = c(
                      'text/csv',
                      'text/comma-separated-values',
                      'text/tab-separated-values',
                      'text/plain',
                      '.csv',
                      '.tsv',
                      '.html'
                    )),


          # Output: datatable
          DT::dataTableOutput("data_as_table")%>%withSpinner(),

          #Download button
          downloadButton("downloadData", "Download")

        )
    )

Код сервера

Создание сервера

    server <- function(input, output) {


      #Data is a reactive element meaning it will update when the reactive input inside it change
      #Data will update when input$file changes
      #input$file is the uploaded file (se fileInput in ui)
      data <-reactive({

        #Store input$file as inFile 
        inFile <- input$file

        #if its empty return nothing
        if (is.null(inFile))
          return(NULL)

        #read in the file as a csv, with headers, comma seperated
        dd = read.csv(inFile$datapath, header = T,
                 sep = ",")
        dd  = as.data.frame(dd)

        #Shortening dataframe 
        #dd= dd[apply(dd[, endsWith(colnames(dd), "_down")], 1, function(x) any(x == "TRUE")), ]


        #Remove duplicates by ID column, and show unique
        #xxx
        return(dd)
      })



    #Make the output data_as_table a datatable containing the reactive element data
     output$data_as_table<-DT::renderDataTable({
       data()
     })


     # Downloadable csv of reactive data() object
     output$downloadData <- downloadHandler(
       filename = function() {
         paste("Download", Sys.date(), ".csv", sep = "")
       },
       content = function(file) {
         write.csv(data(), file, row.names = FALSE)
       }
     )
    }

    #Launch shiny app
    shinyApp(ui = ui, server = server)

1 Ответ

0 голосов
/ 18 октября 2018

Вы можете удалить дубликаты, используя dplyr::distinct.Он сохранит только первый экземпляр идентификатора и удалит другие.В вашем случае добавьте это до return(dd) в data реактив -

if("ID" %in% names(dd)) {
    dd <- dplyr::distinct(dd, ID, .keep_all = T)
}
...