按文字输入过滤反应数据集

时间:2015-09-15 17:09:56

标签: r csv forecasting shiny

我正在尝试在Shiny中创建一个仪表板,用户可以选择一个月/年并在该时间段内执行一些预测分析。此时,我有一些运行的东西,我可以使用fileInput()调用引入一个反应数据集。我遇到的问题是通过选定的部件号对数据进行子集化。所以我带有了带有incidentDate,partNumber和demand(数据列)的.csv,现在我想使用选定的部件号对数据进行子集化(使用textInput作为我的被动值)。

data <- reactive({
  file1 <- input$file
  if(is.null(file1)){return()} 
  f = read.csv(file=file1$datapath, header = TRUE, stringsAsFactors = FALSE)
})

上面的代码是我从计算机上读取.csv的方式。该数据集现在是一个反应数据集,我可以使用data()将其列为表。

output$table <- renderTable({
  if(is.null(data())){return()}
  "how do I call the f from the above reactive function here?"
})

如果我使用textInput框使用“part”作为指向用户输入的指针,我如何将data()子集化为仅包含与该部件编号匹配的行?在常规的R中,我只是调用数据$ partNumber ='7800123489'并且它将是子集,但我不知道如何使用我带来Shiny的反应数据集来做它。

1 个答案:

答案 0 :(得分:1)

我在另一个post@aosmith的帮助下想出了这一点,感谢所有人的帮助。

一旦我读入.csv,我将其在反应函数中进行子集化,然后在输出表中调用data()。我可以在零件textInput中键入零件编号,然后在选择要读入的文件后,表格中只填充包含该零件编号的值。

IN UI SECTION

mainPanel(
  textInput("part", "Enter Part Number"),
  uiOutput("tb")
)

在服务器部分

server <- function(input, output) {
  data <- reactive({
    file1 <- input$file
    if(is.null(file1)){return()} 
    read <- read.csv(file=file1$datapath, header = TRUE, stringsAsFactors = FALSE)
    f <- subset(read, partNumber %in% input$partNumber)
    return(f)
})

 output$table <- renderTable({
    if(is.null(data())){return()}
    data()
})

因此,此代码的关键是读取文件,然后使用f使用textInput的响应创建子集%in% input$part并将f返回{{1} }}