我想要一个有光泽的应用程序来创建一个新数据框,其中的值可以从另一个已加载的数据库中选择。
我已经尝试按照我在这里看过的一些帖子来构建它,但仍然无法弄明白。
这是df:
Names,ID
Adam,1234
Smith,4321
Frank,1111
这是我的代码:
library(data.table)
library(shiny)
#dataframe
names <- c("Adam", "Smith", "Frank")
id <- c(1234, 4321, 1111)
data <- data.table(names, id)
#empty dataframe
df <- data.frame(matrix(ncol = 2, nrow = 0))
x <- c("names", "id")
colnames(df) <- x
ui <- fluidPage(
selectInput("names",
"Names:",
c("Search here...",
data$names)),
dataTableOutput("tabela")
)
server <- function(input, output, session) {
df_subset <- reactive({
df <- subset(data, names == input$names)
return(df)
})
output$tabela <- renderDataTable({df_subset()})
}
shinyApp(ui, server)
我希望用户在可视化时选择名称,然后单击操作按钮(稍后我将继续操作)以在该新数据框上运行脚本。
当我选择第一个名称时,它会为表格选择该值,但是当我选择另一个名称时会覆盖它。
以下是它的样子:
等等,所以他们可以根据自己的意愿选择。 有人可以帮我吗? 谢谢
答案 0 :(得分:0)
这是一个错误的命名错误。以下是工作示例。但是,你的q仍然不清楚,你对空数据框的子集是什么意思?如果你不知道的话,只是想让你知道。当您使用Error in postgresqlNewConnection(drv, ...) :
RS-DBI driver: (could not connect user@host:5432 on dbname "dbname": sslmode value "require" invalid when SSL support is not compiled in)
时,搜索框会根据您输入的内容自动进行子设置。例如,如果您键入renderDataTable
,则所有名称为adam的行都将自动进行子集化。
Adam
答案 1 :(得分:0)
数据框data
未被覆盖 - 它正在&#34;积极地&#34;基于输入的子集 - 如果有意义的话。渲染的dataTableOutput
正在改变,这是预期的行为。
此外,您不需要具有被动df_subset
,以下代码应该可以正常运行:
<强> CODE 强>
library(data.table)
library(shiny)
names <- c("Adam", "Smith", "Frank")
id <- c(1234, 4321, 1111)
data <- data.table(names, id)
rm(names, id)
ui <- fluidPage(
fluidRow(
column(12,
h2("Original Table"),
dataTableOutput("tabela")
)
),
fluidRow(
column(8,
h2("Select Names for new table"),
selectInput(inputId = "names", label = "Select Name",
choices = data$names, multiple = T))
),
fluidRow(
column(12,
h2("Subset Table"),
dataTableOutput("tabelb"))
)
)
server <- function(input, output, session) {
output$tabela <- renderDataTable({return(data)})
output$tabelb <- renderDataTable({return(data[ names %in% input$names])})
}
shinyApp(ui, server)
输出
在这里查看答案:R shiny - save chosen values in selectInput,您可能希望为会话保存reactiveValues
- 看起来更优雅。