更改闪亮的数据集列的名称
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 中输入的内容将被保留,直到您更改其中一个下拉菜单,否则它会在您键入时尝试更改列名称。您可能想要放置一个提交按钮。让它工作起来既快速又肮脏。可以用,刚刚测试过。
已编辑:
忘记放第二个隔离...
我希望能够通过“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 中输入的内容将被保留,直到您更改其中一个下拉菜单,否则它会在您键入时尝试更改列名称。您可能想要放置一个提交按钮。让它工作起来既快速又肮脏。可以用,刚刚测试过。
已编辑: 忘记放第二个隔离...