【发布时间】:2021-11-28 08:14:05
【问题描述】:
下面的代码是用 R shiny 编写的,目前从“mtcars”数据库中读取数据。此应用程序用于替换列中的特定数据。它具有用于选择列的“要搜索的列”等选项,用于替换用户在“替换”字段中指定的值的“替换”和“按”。它现在运行良好。
但我真正想要的是使用“浏览”来上传我自己的 csv 数据并执行与“替换”和“BY”相同的操作。如何做到这一点?
预期结果:
如何替换值? (从旧值到新值)。例如,我应该如何通过引用下面 csv 数据中“选择列”中的列名来修改“范围”列中的值 100 到 500?
当前 csv:
ID Type Category Range
21 A1 B1 100
22 C1 D1 200
23 E1 F1 300
预期的 CSV 结果:
ID Type Category Range
21 A1 B1 500
22 C1 D1 200
23 E1 F1 300
app.R
library(shiny)
library(DT)
library(dplyr)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
fileInput("file1", "Choose CSV File", accept = ".csv"),
selectInput("col", "Column to search:", names(mtcars), names(mtcars)[1]),
textInput("old", "Replace:"),
textInput("new", "By:"),
actionButton("replace", "Replace!"),
),
mainPanel(
DTOutput("table1")
)
)
)
server <- function(input, output, session) {
my_data <- reactiveVal(mtcars)
observeEvent(input$replace, {
req(input$col)
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)
【问题讨论】:
-
@RonakShah,我已经更新了上面的“预期 CSV 结果”。
-
@RonakShah,我在这里分享的 CSV 只是我更大的 CSV 的一部分,它有超过 100,000 条记录。我想用来替换我从
selectInput中选择的列中的一些值(从显示 CSV 列名的下拉列表中)