You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改R Shiny代码实现上传CSV文件后替换指定列的对应值

R Shiny 自定义CSV数据列值替换功能实现方案

代码修改说明

原有代码已经预留了文件上传控件,只需要补充文件读取、数据集更新、列选项动态联动三个逻辑即可实现需求,修改后既保留了默认mtcars数据集的使用能力,也支持上传自定义CSV文件执行替换操作。

完整可运行代码

library(shiny)
library(DT)
library(dplyr)

ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      fileInput("file1", "选择CSV文件", accept = ".csv"),
      selectInput("col", "待搜索列:", choices = NULL),
      textInput("old", "替换值:"),
      textInput("new", "替换为:"),
      actionButton("replace", "执行替换"),
    ),
    mainPanel(
      DTOutput("table1")
    )
  )
)

server <- function(input, output, session) {
  # 初始默认使用mtcars数据集,无上传文件时可直接使用
  my_data <- reactiveVal(mtcars)
  
  # 监听文件上传动作,读取文件并更新可选列
  observeEvent(input$file1, {
    req(input$file1)
    # 读取CSV,若为空格分隔文件请将sep参数改为" ",制表符分隔改为"\t"
    uploaded_df <- read.csv(
      input$file1$datapath,
      header = TRUE,
      sep = ",",
      check.names = FALSE
    )
    my_data(uploaded_df)
    # 动态更新列选择下拉框的选项
    updateSelectInput(
      session,
      "col",
      choices = names(uploaded_df),
      selected = names(uploaded_df)[1]
    )
  })
  
  # 原有列值替换逻辑保持不变,自动适配数值/字符列类型
  observeEvent(input$replace, {
    req(input$col, input$old)
    dat <- my_data()
    traf <- if (is.numeric(dat[[input$col]])) as.numeric else identity
    my_data(dat %>%
              mutate(!!rlang::sym(input$col) := 
                       replace(!!rlang::sym(input$col),
                               as.character(!!rlang::sym(input$col)) == input$old,
                               input$new) %>% 
                       traf()))
  })
  
  output$table1 <- renderDT(
    my_data()
  )
}

shinyApp(ui, server)

效果验证

上传你提供的示例CSV文件后,选择Range列,替换值输入100,替换为输入500,点击执行替换即可得到预期的输出结果,其余列数据不会发生变更。

内容的提问来源于stack exchange,提问作者Kevin Tracey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 15:15:01