1

我正在尝试构建一个闪亮的应用程序,这很好,但我试图将我的数据框中的一列放在 selectinput 中,但到目前为止还没有找到解决方案。我有一个包含 505 个因素的列,称为 AAPL、AAL 等。我希望这些因素在我的 selectinput 中,以便您可以从这 505 个因素中进行选择,这是我现在的代码,以及我正在尝试的列名进入 selectinput 是 bcl-data$Name。

library(shiny)
library(tidyverse)
library(shinythemes)
library(ggplot2)
library(dplyr)



bcl <- read.csv("bcl-data.csv", stringsAsFactors = FALSE)



# Define UI for application that draws a histogram
ui <- fluidPage(theme = shinytheme("darkly"),
                
                
                
# Application title
titlePanel("Overzicht S&P 500 Aandelen"),
                
                
                
# Sidebar with a slider input for number of bins 
sidebarLayout(
sidebarPanel(
sliderInput(inputId = "priceInput", label = "close", min = 0, max = 2050, value = c(0,300), pre = "$"),
selectInput(inputId = "typeInput", label = "Name", choices = (bcl-data$Name)), 
dateRangeInput(inputId = "dateInput", 
label = "date", 
start = "2013/02/08", 
end = "2013/03/08", 
 format = "yy/mm/dd")
),
                    
                    
                    
# Show a plot of the generated distribution
mainPanel(
tabsetPanel(
tabPanel("Plot", plotOutput("Plot")),
tabPanel("Datatable", tableOutput("Datatable"))
            )
        )
    )
)



# Define server logic required to draw a histogram
server <- function(input, output) { 
    output$Plot <- renderPlot({ 
        filtered <- bcl %>%
            filter(close >= input$priceInput[1]) %>%
            filter(close <= input$priceInput[2]) %>%
            filter(date >= input$dateInput[1] & date <= input$dateInput[2]) %>%
            filter(bcl-data$Name == input$typeInput)
        filtered
        ggplot(filtered, aes(x = date, y = close, color = Name)) +
            geom_point()
    })
    output$Datatable <- renderTable({
        filtered <-
            bcl %>%
            filter(close >= input$priceInput[1]) %>%
            filter(close <= input$priceInput[2]) %>%
            filter(date >= input$dateInput[1] & date <= input$dateInput[2]) %>%
            filter(bcl-data$Name == input$typeInput)
        filtered
    })
}



# Run the application 
shinyApp(ui = ui, server = server)
4

1 回答 1

1

上面的评论:我认为你的错误在于bcl-data$Name. 虽然bcl-data.csv是您加载的文件,但您将其保存为对象bcl- 这意味着它应该只是bcl$Name. selectInput(inputId = "typeInput", label = "Name", choices = bcl$Name)在您的过滤器中,您也可以简单地拥有filter(Name == ,因为您已经bcl通过管道提供数据/对象。

为了确保我们删除重复值,我们可以包含unique.

这是我认为应该起作用的(无法测试,因为没有数据)。

library(shiny)
library(tidyverse)
library(shinythemes)
library(ggplot2)
library(dplyr)



bcl <- read.csv("bcl-data.csv", stringsAsFactors = FALSE)



# Define UI for application that draws a histogram
ui <- fluidPage(theme = shinytheme("darkly"),
                
                
                
# Application title
titlePanel("Overzicht S&P 500 Aandelen"),
                
                
                
# Sidebar with a slider input for number of bins 
sidebarLayout(
sidebarPanel(
sliderInput(inputId = "priceInput", label = "close", min = 0, max = 2050, value = c(0,300), pre = "$"),
selectInput(inputId = "typeInput", label = "Name", choices = unique(bcl$Name)), 
dateRangeInput(inputId = "dateInput", 
label = "date", 
start = "2013/02/08", 
end = "2013/03/08", 
 format = "yy/mm/dd")
),
                    
                    
                    
# Show a plot of the generated distribution
mainPanel(
tabsetPanel(
tabPanel("Plot", plotOutput("Plot")),
tabPanel("Datatable", tableOutput("Datatable"))
            )
        )
    )
)



# Define server logic required to draw a histogram
server <- function(input, output) { 
    output$Plot <- renderPlot({ 
        filtered <- bcl %>%
            filter(close >= input$priceInput[1]) %>%
            filter(close <= input$priceInput[2]) %>%
            filter(date >= input$dateInput[1] & date <= input$dateInput[2]) %>%
            filter(Name == input$typeInput)
        filtered
        ggplot(filtered, aes(x = date, y = close, color = Name)) +
            geom_point()
    })
    output$Datatable <- renderTable({
        filtered <-
            bcl %>%
            filter(close >= input$priceInput[1]) %>%
            filter(close <= input$priceInput[2]) %>%
            filter(date >= input$dateInput[1] & date <= input$dateInput[2]) %>%
            filter(Name == input$typeInput)
        filtered
    })
}



# Run the application 
shinyApp(ui = ui, server = server)
于 2020-10-21T16:19:38.123 回答