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

时间:2019-10-16 04:33:05

标签: r shiny crosstab

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

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

条形图没有问题。我无法弄清楚如何更改交叉表中的输入。

问题所在是服务器对象中的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)

1 个答案:

答案 0 :(得分:0)

问题在于students$var引用了一个字面名称为“ var”的列,而您希望该列的名称为varstudents[[var]]

解决了“使用变量访问数据框列”问题,并在获胜答案的最后一句中回答。 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,但这值得另一个问题。