闪亮的应用程序,以消除绘制的实验人工制品

时间:2017-04-15 11:20:58

标签: r shiny

我有一个二维数据集,我已在下面绘制。正如箭头所指出的那样,我想从数据集中消除两个实验性人工制品。

head(df)
data      CTCF 
1 -20000 0.9220779        
2 -19999 0.9220779        
3 -19998 0.9350649        
4 -19997 0.9350649
5 -19996 0.9220779       
6 -19995 0.9220779

click here to see

我从闪亮的图库中获取了一个闪亮的应用程序,以显示数据集中单击点的x和y轴上的位置。

library(shiny)

ui <- basicPage(
  plotOutput("plot1", click = "plot_click"),
  verbatimTextOutput("info")
)

server <- function(input, output) {
  output$plot1 <- renderPlot({
    plot(df[,1], df[,2])
  })

  output$info <- renderText({
    paste0("x=", input$plot_click$x, "\ny=", input$plot_click$y)
  })
}

shinyApp(ui, server)

这对于准确识别人工制品的位置非常有用,但我宁愿能够操纵这些位置的数据来摆脱人工制品。

有人知道如何在图表上点击后操纵数据吗?我希望能够点击人工制品所在的区域,以便将它们反应性地设置为平均值y轴值。如果你可以点击并拖动某个区域而不必单独点击这些点,那就更好了。

UPDATE 我尝试过以下方法:

library(shiny)

ui <- basicPage(
  plotOutput("plot1", click = "plot_click"),
  tableOutput("tab")
)

    server <- function(input, output) {
  output$plot1 <- renderPlot({
    plot(df[,1], df[,2])
  })

  output$info<-renderText({class(as.numeric(input$plot_click$x))})
  data_new<-eventReactive(input$plot_click,{
     data=df
     data[round(as.numeric(input$plot_click$x)), 2]=mean(data[,2])
     data  
  })
 output$tab<-renderTable({data_new()})
 }

shinyApp(ui, server)

但是输出会用平均值替换整列,而不是仅仅替换点击的位置

data    CTCF    
-20000  0.71 #average of entire column  
-19999  0.71    
-19998  0.71    
-19997  0.71    
-19996  0.71

我不知道如何处理对象以便能够解决这个问题...... 感谢

1 个答案:

答案 0 :(得分:1)

用平均替换

替换点击的点 使用

代码的

String

data[round(as.numeric(input$plot_click$x)), 2]=mean(data[,2])

要点击并拖动某个地区,您可以更改data[which(data[,1] == round(as.numeric(input$plot_click$x))),2] = mean(data[,2]),如下所示:

eventReactive

[编辑]:根据@ user7792658评论,我忘了在ui中提到 data_new<-eventReactive(input$plot_brush,{ data=df rowmin <- which(data[,1] == round(as.numeric(input$plot_brush$xmin))) rowmax <- which(data[,1] == round(as.numeric(input$plot_brush$xmax))) data[rowmin:rowmax,2] = mean(data[,2]) data }) 应该如下:

plotOutput

希望它有所帮助!