如何将列替换为第一行RSHINY

如何将列替换为第一行RSHINY,r,shiny,shinydashboard,R,Shiny,Shinydashboard,这是我的闪亮应用程序。现在我无法共享运行它的数据,但基本上这个应用程序有多个CSV保存在./data文件夹中。我想做的是比较两对csv。现在,当我从下拉菜单中选择CSV文件并进行比较时,我有一些列名称混乱的结果表,这意味着我应该删除列名称并用第一行数据替换它们,然后,在比较了其他文件之后,我仍然得到了其他结果,并且得到了正确的列名,我不必替换这些列名 library("shiny") library(daff) library(dplyr) library(shinythemes) librar

这是我的闪亮应用程序。现在我无法共享运行它的数据,但基本上这个应用程序有多个CSV保存在./data文件夹中。我想做的是比较两对csv。现在,当我从下拉菜单中选择CSV文件并进行比较时,我有一些列名称混乱的结果表,这意味着我应该删除列名称并用第一行数据替换它们,然后,在比较了其他文件之后,我仍然得到了其他结果,并且得到了正确的列名,我不必替换这些列名

library("shiny")
library(daff)
library(dplyr)
library(shinythemes)
library("DT")
library(readr)
library(stringr)
library(tidyr)
library(purrr)
library(janitor)
library(data.table)
library(magrittr) 
library(plyr)

setwd("path")
ui = fluidPage(
  titlePanel("Automated Data Dictionary Comparison"),
  sidebarLayout(

    sidebarPanel(

      selectInput(inputId = 'Dic1',
                  label = 'Choose First Data Dictionary:',

                  choices = list.files(path = "./data",
                                       full.names = FALSE,
                                       recursive = FALSE)),
      selectInput(inputId = 'Dic2',
                  label = 'Choose Second Data Dictionary:',
                  choices = list.files(path = "./data",
                                       full.names = FALSE,
                                       recursive = FALSE)),
      actionButton("do", "Replace columns"),

      tags$hr(),
      # This one is linked by the id 'download'
      downloadButton('download',"Download the data")


    ),


    mainPanel (
      tabsetPanel(
       tabPanel('Html Table',
         HTML("<div style ='overflow:auto; height:500px; width:800px ' >"),
         uiOutput('contents'),
         HTML("</div>")
       ),
       tabPanel('Diff Table',
                fluidRow(
                  column(div(DT::dataTableOutput("mytable"), style = "font-size: 75%; width: 75%"),width = 12)
                )


       ),

       tabPanel("Modified table",
                fluidRow(
                  column(div(DT::dataTableOutput("modified"), style = "font-size: 75%; width: 75%"),width = 12)
                )
       ),
       tabPanel("Added table",
                fluidRow(
                  column(div(DT::dataTableOutput("added"), style = "font-size: 75%; width: 75%"),width = 12)
                )
       )
      )



      )
    )
)


server = function(input, output){    
  # Parse first file
  dataset1 <- reactive({

    infile <- input$Dic1

    if (is.null(infile)){
      return(NULL)
    }
    x <- read.csv(paste0("./data/", infile[[1]]))
    x
  })
  # Parse second file
  dataset2 <- reactive({

    infile <- input$Dic2

    if (is.null(infile)){
      return(NULL)
    }
    x <- read.csv(paste0("./data/", infile[[1]]))
    x
  })

  # Create difference table then save
  diff1 <- reactive( {
    dd <- diff_data(data_ref=dataset1(), data=dataset2())
    write_diff(dd, "./data/diffrev.csv")

    diff_df <- readr::read_csv("./data/diffrev.csv")
    ft <-as.data.frame(lapply(diff_df, iconv, from = 'UTF-8', to = 'UTF-8'), stringsAsFactors = FALSE)
ft


  })




  output$mytable <- renderDataTable({

   diff1()

  },options = list(scrollX = TRUE))


  output$download <- downloadHandler(
    filename = function(){"thename.csv"}, 
    content = function(fname){
      write.csv(thedata(), fname)})

}
shinyApp(ui = ui, server = server)

我的第一个问题是,在显示diff1表输出后,如何智能地删除列名并用第一行替换列名?我正在考虑使用一个操作按钮,我可以删除那些不需要列的表,但它仍然会从输出中删除需要的列


我期望的是,一旦我在输出中看到不需要的列,我可以替换它们,但一旦我在输出中看到需要的列,我应该选择保留它们

请共享一些数据,甚至是合成的。我无法完全理解问题所在。它是通过读取带有或不带有列名的CSV来实现的吗?当列名不同时使用data_diff?还有别的问题吗?这与shiny有直接关系吗?@Omri374问题是我从第一个下拉列表中选择了文件,并与第二个下拉列表中的第二个文件进行比较。我需要帮助的问题是我在renderDatatable中获得的输出。我比较了一些文件,输出中的列弄乱了,我只是想用第一行替换这些列,但我仍然有一些比较,它们在输出中具有正确的列名称,我不需要替换它们。问题是在看到输出后,我如何选择替换或保留列名?请添加一个完全可复制的示例。我不知道你的两个数据帧是什么样子,所以我不能复制这个