我有一张这样的表:
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;。
这是我制作的第一款闪亮的应用程序。 谢谢。
答案 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"))
)
)