我希望从数据集中选择多个列,然后在所选列中再选择一个UNIQUE值。现在这个独特的功能似乎不起作用。它复制了列选择中具有最独特值的值。
ui<-shinyUI(fluidPage(fluidRow(column(width = 4,
uiOutput("variants"),
uiOutput("variants2")
)
)))
server <-shinyServer( function(input, output, session) {
df<-somedata
output$variants <- renderUI({
selectInput ("choose_columns",
"Choose Attribute",
sort(unique(names(df)), decreasing = FALSE),
selected="",
multiple =TRUE)
})
dat<-reactive({
unique(df[,input$choose_columns])
})
output$variants2 <- renderUI({
selectInput ('further',
'Choose Attribute(s) Value(s)',
dat(),
selected="",
multiple = TRUE)
})
})
shinyApp(ui, server)
答案 0 :(得分:0)
您的代码似乎对我有用。我使用mtcars
数据集作为示例。我唯一的建议是在df<-somedata
代码之外(之前)server
。这样,每次用户修改输入时都不会重新加载数据。以下是我的mtcars
代码:
ui<-shinyUI(
fluidPage(
fluidRow(
column(width = 4,
uiOutput("variants"),
uiOutput("variants2")
)
)
)
)
library(datasets)
data("mtcars")
server <- shinyServer( function(input, output, session) {
output$variants <- renderUI({
selectInput ("choose_columns",
"Choose Attribute",
sort(unique(names(mtcars)), decreasing = FALSE),
selected="",
multiple =TRUE)
})
dat<-reactive({
unique(mtcars[,input$choose_columns])
})
output$variants2 <- renderUI({
selectInput('further',
'Choose Attribute(s) Value(s)',
dat(),
selected="",
multiple = TRUE)
})
})
shinyApp(ui, server)
答案 1 :(得分:0)
尝试打印dat(),您会看到每个列中的值可能重复,但整个行都不会等于另一行。 selectInput
只是按列破坏dat()。在selectInput
按列获取唯一值的一种方法是使用:
dat<-reactive({
lapply(mtcars[,input$choose_columns], unique)
})