更改闪亮的数据集列的名称

change the name of the column of the dataset within the shiny

我希望能够通过“colnames(data) <- c()”在闪亮的应用程序中更改数据集的列名称。有什么办法吗? 在这里,我有一个可重现的 shiny 和一个测试数据集。我们可以使用“textAreaInput()”来更改列的名称还是有更好的方法?感谢您的帮助。

ui.R

library(ggplot2)
library(shiny)

ui<-fluidPage(
  titlePanel("Basic DataTable"),
  
  # Create a new Row in the UI for selectInputs
  fluidRow(
    column(4,
           selectInput("man",
                       "Manufacturer:",
                       c("All",
                         unique(as.character(mpg$manufacturer))))
    ),
    column(4,
           selectInput("trans",
                       "Transmission:",
                       c("All",
                         unique(as.character(mpg$trans))))
    ),
    column(4,
           selectInput("cyl",
                       "Cylinders:",
                       c("All",
                         unique(as.character(mpg$cyl))))
    ),
    column(4,
           textAreaInput("modify_code", "change the column names: ", 
                         "colnames(data) <- c()", width="600px")
           
           ),
  ),
  DT::dataTableOutput("table")
)

server.R

server<-function(input, output) {
  
  # Filter data based on selections
  output$table <- DT::renderDataTable(DT::datatable({
    data <- mpg
    if (input$man != "All") {
      data <- data[data$manufacturer == input$man,]
    }
    if (input$cyl != "All") {
      data <- data[data$cyl == input$cyl,]
    }
    if (input$trans != "All") {
      data <- data[data$trans == input$trans,]
    }
    data
  }))
  
}


shinyApp(ui, server)

如果您决定使用 textAreaInput,您可以从 input$modify_code 中获取您的名字,将其拆分为一个向量,new_col_names <- unlist(strsplit(input$modify_code," ")),假设每个新列名称都是一个单词(或使用一个分隔符)。然后将其传递给服务器端的 datatable(data, colnames = new_col_names) 。您输入的字数必须与您尝试重命名的列数相匹配。您是否有理由希望用户更改列名?您可以在构建表时在服务器端重命名。

已编辑 服务器端

server<-function(input, output) {
  
  # Filter data based on selections
  output$table <- DT::renderDT({
    data <- mpg
    if (input$man != "All") {
      data <- data[data$manufacturer == input$man,]
    }
    if (input$cyl != "All") {
      data <- data[data$cyl == input$cyl,]
    }
    if (input$trans != "All") {
      data <- data[data$trans == input$trans,]
    }
    
    ifelse(isolate(input$modify_code) == "",
           col_names <- names(data),
           col_names <- unlist(strsplit(isolate(input$modify_code),"|",fixed=T)))
    
    DT::datatable(data, colnames = col_names)
  })
  
}

UI 方面没有变化。您需要输入 11 个由 | 分隔的名称一间酒吧。像这样 one|two|three|four|five|six|seven|eight|nine|ten|eleven.

您在 textAreaInput 中输入的内容将被保留,直到您更改其中一个下拉菜单,否则它会在您键入时尝试更改列名称。您可能想要放置一个提交按钮。让它工作起来既快速又肮脏。可以用,刚刚测试过。

已编辑: 忘记放第二个隔离...