R - Time serie请求中的第一个Shiny App

时间:2015-12-01 17:45:01

标签: plot shiny time-series rstudio

我有一张这样的表:

    EmpNum      Sym   Jan_C Feb_C Mar_C
    34335333    2200    400 300     200
    34334533    2243    300 200    100
    2424142     5025    200 100     400
    1023231     5021    204 532    2300

我很想根据用户的选择绘制时间序列。他将选择EmpNum和Sym,输出将是从1月到3月的这个系列的情节。我开始写这个:

    **ui.R**

    shinyUI(
 pageWithSidebar (
   headerPanel ("My Shiny App"), 

sidebarPanel (
 selectInput("Employee", "Please Select An Employee Number:",
              choices=data$EmpNum,2424142),
 selectInput ("Symbol", "Please Select Salary Symbol:",
                           choices=data$Sym, 5025)
),
mainPanel(plotOutput("myPlot"))

)
)

**server.r:**

shinyServer (
 function (input,output,session){
     output$myPlot <- renderPlot({
     data <- read.csv(file="workers.csv", header=T)
     seData  <- as.numeric(data[which(data$EmpNum==input$Employee & data$Sym==input$Symbol),][3:5])
     Et  <- ts(seData, start=1,end=3)
     plot(Et,col="blue")
 })
})

更新:我解决了这个问题。如果用户将选择例如值&#39; 34335333&#39;将出现给Sym的唯一价值是:&#39; 2200&#39;和&#39; 2243&#39;。

这是我制作的第一款闪亮的应用程序。 谢谢。

1 个答案:

答案 0 :(得分:0)

这是使用动态输入的解决方案。我嘲笑数据,因为你没有提供可重现的问题:

<强> server.R

# create mock data
set.seed(1)
data <- data.frame(EmpNum = rep(seq(500), each = 5), Sym = rep(c("A", "B", "C", "D", "E"), 500), dp1 = runif(500), dp2 = runif(500), dp3 = runif(500))

# remove some columns to test reactive selection
n <- nrow(data)
droprows <- sample(seq(n), floor(n*0.7))
data <- data[-droprows, ]

shinyServer (
  function (input,output,session){

    output$employee <- renderUI({
      selectInput("Employee", "Please Select An Employee Number:",
                  choices = sort(data$EmpNum))
    })

    output$symbol <- renderUI({
      if (!is.null(input$Employee)){
        selectInput ("Symbol", "Please Select Salary Symbol:",
                    choices = sort(unique(data[data$EmpNum == input$Employee, ]$Sym)))  
      }
    })


    output$myPlot <- renderPlot({
      if (all(!is.null(input$Employee), !is.null(input$Symbol))){

      seData  <- as.numeric(data[data$EmpNum == input$Employee & data$Sym == as.character(input$Symbol),][3:5])
      Et  <- ts(seData, start=1,end=3)
      plot(Et,col="blue")
      }
    })
  })

<强> ui.R

shinyUI(
  pageWithSidebar (
    headerPanel ("My Shiny App"), 

    sidebarPanel (
      uiOutput("employee"),
      uiOutput("symbol")
    ),
    mainPanel(plotOutput("myPlot"))

  )
)