在Shiny App 中使用ends_with 在R 中动态添加Select 列 [英] Add Select columns dynamically in R with ends_with in Shiny App

查看:23
本文介绍了在Shiny App 中使用ends_with 在R 中动态添加Select 列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用 stackoverflow,我创建了一个闪亮的应用程序,它上传一个 csv 文件,然后显示一个数据表.

Using stackoverflow, I created a shiny app which uploads a csv file and then displays a datatable.

动态选择列之后,其中一些列有"_down"结束.

After selecting columns dynamically, where some columns have "_down" end.

我需要帮助来缩短数据框(如下面的代码所示),并按 ID 列(如果存在)删除重复项.

I require help in shortening the dataframe (as in the code below) and also remove duplicates by ID column (if present).

    # 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)

推荐答案

您可以使用 dplyr::distinct 删除重复项.它只会保留 ID 的第一个实例并删除其他实例.在您的情况下,在 data 反应性 -

You can remove duplicates using dplyr::distinct. It'll only keep the first instance of the ID and remove others. In your case add this before return(dd) in data reactive -

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

这篇关于在Shiny App 中使用ends_with 在R 中动态添加Select 列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆