【发布时间】:2018-09-20 07:15:39
【问题描述】:
我想要一个 shinyApp 来创建一个新的数据框,其中的值是从另一个已经加载的数据框中选择的。
我已经尝试根据我在这里看到的一些帖子构建它,但仍然无法弄清楚。
这是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)
我希望用户在可视化名称时选择名称,然后他们单击操作按钮(我将在稍后处理)以在该新数据帧上运行脚本。
当我选择第一个名称时,它会将该值选择到表中,但当我选择另一个名称时会覆盖它。
它应该是这样的:
等等,所以他们可以选择任意数量的。 有人可以帮我吗? 谢谢
【问题讨论】:
-
当您对
df进行子集化时,所使用的列名不正确 - 它应该是names而不是nomes。selectInput参数相同。另外,你为什么想要一个空的df,你可以直接将data子集化为一个反应对象并显示它。显示不会改变data本身。 -
谢谢!我已经解决了。但仍然无法在没有覆盖问题的情况下运行该示例。我已经编辑了代码,你可以明白我的意思。