从R Shiny中的情节标记时间序列数据表中的无效点

时间:2018-11-14 22:17:06

标签: r shiny

我正在尝试构建一个可以执行以下操作的Shiny App:

  1. 从数据库中读取时间序列数据集(例如DateTime,Value,Status),其中Status标记点是否有效并进行绘制
  2. 创建该数据的时序图(仅显示Status =有效点)。
  3. 在界面中创建一个数据表,显示正在绘制的数据
  4. 允许用户查看图表中的数据,然后通过将表中的“状态”设置为无效来“标记”出点

上面的步骤1-3我知道该怎么做,但是我正在寻找有关如何实施第四步的建议。 Shiny可以有一个交互式表格,如果用户设置了stats标志,它将在该表格中做出反应并重绘该图?

这里的想法是制作一个交互式数据清理工具,用于处理从仪器中记录的时间序列数据,该工具通常会包含不良数据点。

谢谢

1 个答案:

答案 0 :(得分:0)

这是使用library(DT)的解决方案。 在“绘图”列中键入“ 0”,以从绘图中删除数据点。

library(shiny)
library(DT)

shinyApp(
  ui = fluidPage(DTOutput('myTable'),
                 plotOutput("myPlot")),
  server = function(input, output) {
    output$tbl = renderDT(iris,
                          options = list(lengthChange = FALSE),
                          editable = TRUE)

    myData = data.frame(y = 1:10, plot = 1)

    output$myTable = renderDT(myData, selection = 'none', editable = TRUE)

    proxy = dataTableProxy('myTable')

    observeEvent(input$myTable_cell_edit, {
      info = input$myTable_cell_edit
      str(info)
      i = info$row
      j = info$col
      v = info$value
      myData[i, j] <<- DT::coerceValue(v, myData[i, j])
      replaceData(proxy, myData, resetPaging = FALSE)  # important
    })

    output$myPlot <- renderPlot({
      input$myTable_cell_edit
      plot(myData$y[myData$plot > 0], myData$y[myData$plot > 0])
    })

  }
)

有关更多信息,请参见this