从用户输入R Shiny创建分组饼图

时间:2015-08-11 15:55:31

标签: r shiny aggregate

我希望用户能够上传.csv并能够创建它的饼图。如果有一个列包含他们想要组合在一起的类别,他们应该能够。 下面的代码显示了我想要做的事情,但只有在编写程序时我知道列名(在本例中为Gender)时才有效。

piePlotData = aggregate(. ~ Gender, inFile, sum)
pie(piePlotData[[input$pieData]], labels = piePlotData[[input$pieGroups]])

如果可能,我想用input$pieGroups

替换性别

以下是可以上传的数据的简单示例:

  Gender    Name    Maths   English 
   M        Bob      4        2 
   M        Fred     1        7
   F        Mary     5        4

我很抱歉,如果之前已经回答了这个问题,我已经尝试了其他人的解决方案,但是当上传的数据可以采用任何格式并保持相同的列名时,我无法让它们工作。

我更喜欢解决方案只使用基本R包,但任何解决方案都比没有解决方案更好:P 提前致谢

(Somewhat)简单的代码示例:

server.R:

library(shiny)

shinyServer(function(input, output, session) {
  inFile = reactive({ return (read.csv(file.choose(), header = TRUE))})

  observe({
    updateSelectInput(session, "pieData", choices = names(inFile()))
    updateSelectInput(session, "pieGroups", choices = names(inFile()))
  })

  output$plot = renderPlot({
    piePlotData = aggregate(. ~ Gender, inFile, sum)
    pie(piePlotData[[input$pieData]], labels = piePlotData[[input$pieGroups]])
  })
})

ui.R:

shinyUI(pageWithSidebar(
  headerPanel("Grouped Pie Chart"),
  sidebarPanel(
    selectInput("pieData", "Columns in pie", "Update"),
    selectInput("pieGroups", "Groups for pie", "Update")
  ),
  mainPanel(
    plotOutput("plot")
  )
))

1 个答案:

答案 0 :(得分:1)

您可以使用formula从字符串创建公式。

例如,您可以server.R执行:

piePlotData = aggregate(formula(paste0(".~",input$pieGroups)), inFile(), sum)