我有一个二维数据集,我已在下面绘制。正如箭头所指出的那样,我想从数据集中消除两个实验性人工制品。
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
我从闪亮的图库中获取了一个闪亮的应用程序,以显示数据集中单击点的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
我不知道如何处理对象以便能够解决这个问题...... 感谢
答案 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
希望它有所帮助!