我有名为df
的数据,如下所示
Year Major Grade
2015 Economics 5
2015 Architecture 4
2015 Psychology 4
2016 Economics 4
2016 Architecture 5
2016 Psychology 4
2017 Economics 5
2017 Architecture 5
2017 Psychology 4
我感兴趣的是制作一个闪亮的R应用程序,其中有一个按年显示的单行图,还有一个选择专业的selectInput
按钮。我认为我需要创建一个反应性版本的df
,以响应应用过滤器,但我不知道如何。
这是我的密码:
df = data.frame(
Year = c('2015', '2015', '2015', '2016', '2016', '2016', '2017', '2017', '2017'),
Major = rep(c('Economics', 'Architecture', 'Psychology'), times = 3),
Grade = c(5,4,4,4,5,4,5,5,4))
ui <- fluidPage(
inputId = 'MajorSelect',
selectInput(inputId = "Major", label = "Major", choices = df$Major),
plotOutput("plot")
)
server <- function(input, output, session){
df = reactive({df %>% dplyr::filter(Major == input$MajorSelect)})
output$plot = renderPlot(
ggplot(data = df(), aes(x = Year, y = Grade, group = Major, color = Major)) +
geom_line())
}
shinyApp(ui, server)
发布于 2022-10-03 18:05:01
您的代码有一些小问题。首先,在您命名原始数据集时,df
为reactive
使用了不同的名称,例如df_filtered
(当然,在ggplot
代码中也使用这个名称)。第二,由于selectInput
的selectInput
是Major
,所以在filter
语句中使用input$Major
。最后,我建议不要将df$Major
用于selectInput
的choices
参数,而是在unique()
中包装。
library(shiny)
library(dplyr, warn = FALSE)
library(ggplot2)
ui <- fluidPage(
selectInput(inputId = "Major", label = "Major", choices = unique(df$Major)),
plotOutput("plot")
)
server <- function(input, output, session){
df_filtered = reactive({
df %>% dplyr::filter(Major == input$Major)
})
output$plot = renderPlot(
ggplot(data = df_filtered(), aes(x = Year, y = Grade, group = Major, color = Major)) +
geom_line())
}
shinyApp(ui, server)
#>
#> Listening on http://127.0.0.1:7815
https://stackoverflow.com/questions/73939055
复制相似问题