2017-04-15 1 views
1

Ich habe ein 2-D-Dataset, das ich unten gezeichnet habe. Wie von den Pfeilen gezeigt, gibt es zwei experimentelle Artefakte, die ich aus dem Datensatz entfernen möchte.Glänzende App, um geplottete experimentelle Artefakte zu eliminieren

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

i haben eine glänzende app aus der glänzenden Galerie genommen, um die Position auf der X- und Y-Achse eines klickten Punkt in dem Datensatz zu offenbaren.

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) 

Dies ist nützlich für die Identifizierung genau, wo die Artefakte sind, aber ich würde eher der Lage sein, die Daten an diesen Positionen zu manipulieren, loszuwerden, die Artefakte zu bekommen.

Kann jemand die Daten manipulieren, nachdem auf das Diagramm geklickt wurde? Ich möchte in der Lage sein, auf die Regionen zu klicken, in denen die Artefakte liegen, so dass sie reaktiv auf den Mittelwert der y-Achse eingestellt werden. Noch besser wäre es cool, wenn Sie klicken können, und ziehen Sie einen Bereich über, anstatt die Punkte einzeln klicken ...

UPDATE Ich habe versucht, die folgenden:

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) 

Aber die Ausgabe ersetzt die ganz Spalte mit dem Durchschnitt und nicht nur die klickten Positionen ersetzt

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

Und ich weiß nicht genug über glänzend in Bezug darauf, wie es behandelt Objekte der Lage sein, dies zu beheben .... Dank

+0

Können Sie Beispieldaten teilen? – SBista

+0

hallo Entschuldigung für die Wartezeit Beispieldaten sind jetzt oben enthalten –

Antwort

1

Um den angeklickten Punkt mit dem Mittelwert ersetzen mit

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

klicken und ziehen Sie über einen Bereich

data[round(as.numeric(input$plot_click$x)), 2]=mean(data[,2]) Ihres Codes ersetzen können Sie Ihre eventReactive wie folgt ändern:

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 
    }) 

[EDIT]: Wie @ user7792658 Kommentare, habe ich vergessen, dass in der UI diezu erwähnensollte wie folgt sein:

plotOutput("plot1", brush = "plot_brush") 

Hoffe es hilft!

+0

Hallo SBista, Vielen Dank Ihre erste Strategie funktioniert! Aber für das Ziehen: Ich habe Ihre Eingabe $ plot_click auf die Art geändert, wie ich sie hatte (plot_click) und von dort den exakt gleichen Code verwendet: data_new <-eventReactive (Eingabe $ plot_brush, { data = df rowmin < - ..... ..... usw. aber wenn ich versuche, über das Diagramm zu ziehen, zieht es den gesamten Graphen wie ein ".png", wenn ich auf einen einzelnen Punkt klicke, der es zurückbringt: Warnung: Argument von length 0 –

+0

hat es funktioniert, indem Sie das Pinselargument von plotOutput auf 'plot_brush' setzen –

+0

Tut mir leid, vergaß es zu erwähnen.Fügen Sie das in die Antwort für den Fall, dass jemand es später liest. – SBista

Verwandte Themen