交叉表以补充 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,但这值得另一个问题。
我在创建一个闪亮的应用程序时遇到了问题,该应用程序创建了一个可以更改其中一个变量的动态交叉表。
也就是说,我想创建一个应用程序来创建一个交叉表,显示通过每个特征的学生百分比,并在条形图中显示它。
条形图没问题。我不知道如何改变交叉表中的输入。
服务器对象中的 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,但这值得另一个问题。