交叉表以补充 Shiny 应用程序中的堆叠条形图

Cross tab to complement stacked bar plot in Shiny app

我在创建一个闪亮的应用程序时遇到了问题,该应用程序创建了一个可以更改其中一个变量的动态交叉表。

也就是说,我想创建一个应用程序来创建一个交叉表,显示通过每个特征的学生百分比,并在条形图中显示它。

条形图没问题。我不知道如何改变交叉表中的输入。

服务器对象中的 output$my_table 部分是问题所在。

如有任何帮助,我们将不胜感激

library(shiny)
library(ggplot2)

students <- data.frame(Passed = c("Y","Y","Y","Y","Y","Y","N","N"), Gender = rep(c("Male","Female"), each = 4), 
                       Subject = rep(c("Maths","Science"), times = 4),Campus =c(rep(c("Victoria"), times = 7), "NSW"))


ui <- fluidPage(
  titlePanel("Percentage Passed by Characteristic"),
  sidebarLayout(sidebarPanel(
    selectInput(
      "Characteristic",
      "Student characteristic",
      choices = colnames(students)[!colnames(students) %in% c("Passed")],
      selected = colnames(students)[2]
    )
  ),
  mainPanel(
    tabPanel("Plot",
             fluidRow(
               plotOutput("barplot"),
               verbatimTextOutput("summary"))
    ),
    tabPanel("Summary",  
             tableOutput("my_table"))
  )
  ))


server <- function(input, output) {
    output$barplot <- renderPlot({
      var <- input$Characteristic
      gg <-
        ggplot(students, aes_string(x = var, fill= "Passed"))
      gg <- gg + geom_bar(position = "Stack")
      gg
    })
    output$my_table <- renderTable({
      var <- input$Characteristic
      prop.table(table(students$Passed, students$var),1)
    })
}



# Create Shiny object
shinyApp(ui = ui, server = server)

问题是 students$var 指的是字面上名为 "var" 的列,而您希望该列以 var 的值命名:students[[var]].

这是解决问题 "access data frame column using variable" 的问题,并在获胜答案的最后一句中得到了回答。 access data frame column using variable

我通过 运行 您在交互式 R 会话中的代码诊断了问题,将 var 设置为 Gender,然后 运行 prop.table(... 行,这给出了错误:

Error in table(students$Passed, students$var) :
  all arguments must have the same length

您将面临的下一个问题是格式化结果 prop.table,但这值得另一个问题。