选择闪亮的数据

时间:2018-04-10 15:26:44

标签: r dataframe shiny subset

我想要一个有光泽的应用程序来创建一个新数据框,其中的值可以从另一个已加载的数据库中选择。

我已经尝试按照我在这里看过的一些帖子来构建它,但仍然无法弄明白。

这是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)

我希望用户在可视化时选择名称,然后单击操作按钮(稍后我将继续操作)以在该新数据框上运行脚本。

当我选择第一个名称时,它会为表格选择该值,但是当我选择另一个名称时会覆盖它。

以下是它的样子:

  

Select screen

     

After selecting one name

     

After selecting a second name

等等,所以他们可以根据自己的意愿选择。 有人可以帮我吗? 谢谢

2 个答案:

答案 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)

输出

Output

在这里查看答案:R shiny - save chosen values in selectInput,您可能希望为会话保存reactiveValues - 看起来更优雅。