如何从 R Shiny 的选择菜单中拆分选定的列?
Posted
技术标签:
【中文标题】如何从 R Shiny 的选择菜单中拆分选定的列?【英文标题】:How to split selected columns from the choices menu in R shiny? 【发布时间】:2021-10-13 21:20:36 【问题描述】:在 R shiny 中,我使用了 SelectInput 函数,它允许我选择列名称,如“ID”和“类型”,以及一个浏览按钮来上传 csv 文件和一个“SplitColumn”按钮来取消合并列。
我想要做的是,我应该从选择菜单中选择合并的列,在本例中为“类型”,然后运行源代码“SplitColumn.R”来取消合并列并在上传 csv 后观察结果文件。
问题
我尚未收到任何错误,但无需使用“SplitColumn”按钮即可取消合并。当我从选项本身中选择选项时,取消合并有效。
有人可以帮助我解决 ui/server 代码中缺少的任何内容吗?
csv 数据
ID Type Range
21 A1 B1 100
22 C1 D1 200
23 E1 F1 300
SplitColumn.R
splitColumn <- function(data, column_name)
newColNames <- c("Unmerged_type1", "Unmerged_type2")
newCols <- colsplit(data[[column_name]], " ", newColNames)
after_merge <- cbind(data, newCols)
after_merge[[column_name]] <- NULL
after_merge
app.R
library(shiny)
source('splitColumn_stack.R')
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
fileInput("file1", "Choose CSV File", accept = ".csv"),
checkboxInput("header", "Header", TRUE),
actionButton("Splitcolumn", "SplitColumn"),
selectInput(inputId='selectcolumn', label='select column', choices=c('ID, Type'))
),
mainPanel(
tableOutput("contents")
)
)
)
server <- function(input, output)
rv <- reactiveValues(data = NULL)
observe(
file <- input$file1
ext <- tools::file_ext(file$datapath)
req(file)
validate(need(ext == "csv", "Please upload a csv file"))
rv$data <- read.csv(file$datapath, header = input$header)
)
output$contents <- renderTable(
req(rv$data)
rv$data
)
# column_name <- dlg_input("Enter a number", Sys.info()["user"])$res
observeEvent(input$selectcolumn,
rv$data <- splitColumn(rv$data, input$selectcolumn)
)
shinyApp(ui, server)
【问题讨论】:
【参考方案1】:试试这个代码 -
library(shiny)
source('splitColumn_stack.R')
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
fileInput("file1", "Choose CSV File", accept = ".csv"),
checkboxInput("header", "Header", TRUE),
actionButton("Splitcolumn", "SplitColumn"),
selectInput(inputId='selectcolumn', label='select column', '')
),
mainPanel(
tableOutput("contents")
)
)
)
server <- function(session, input, output)
rv <- reactiveValues(data = NULL)
observeEvent(input$file1,
file <- input$file1
ext <- tools::file_ext(file$datapath)
req(file)
validate(need(ext == "csv", "Please upload a csv file"))
rv$data <- read.csv(file$datapath, header = input$header)
updateSelectInput(session, 'selectcolumn', 'select column', names(rv$data))
)
output$contents <- renderTable(
req(rv$data)
rv$data
)
observeEvent(input$Splitcolumn,
rv$data <- splitColumn(rv$data, input$selectcolumn)
)
shinyApp(ui, server)
【讨论】:
以上是关于如何从 R Shiny 的选择菜单中拆分选定的列?的主要内容,如果未能解决你的问题,请参考以下文章
R Shiny - 我无法从selectInput操作中检索选定的输出值
如何使用 actionButton 更改 R Shiny 中 selectInput 上的选定值?
R Shiny DataTable如何防止包含超链接的列中的行选择/取消选择