2013-03-20 9 views
7

lässt dieses Beispiel nehmen:Wie verbinde ich Punkte mit fehlenden Werten?

 test=c(1,5,NA,5,4,1,NA,3,3,5,4,2) 

     plot(test,type="l") 

Dieser Test plot aber die dots.Is eine Art und Weise nicht verbinden wir die NAs ignorieren können und die Punkte verbinden, so dass wir ziemlich Graph bekommen?

Antwort

7

Es gibt keine Art und Weise zu ignorieren, die fehlende Werte. Sie müssen sie durch interpolierte Werte ersetzen.

# using base packages only 
plot(approx(test, xout=seq_along(test))$y, type="l") 
# or, using zoo 
library(zoo) 
plot(na.approx(test), type="l") 
+0

Es gibt! Und du brauchst keine Interpolation ... :-) Danke für den Kopf - ich habe meine Antwort bearbeitet, um den von dir erwarteten Anwendungsfall zu berücksichtigen. –

9

One Optionen sind:

plot(na.omit(test), type = "l") 

Wenn Sie die x-Achse geht von 1 bis behalten wollen - length(test) dann:

plot(na.omit(cbind(x = seq_along(test), y = test)), type = "l") 
+0

bewahrt Aber das die fehlenden Werte entfernt und deshalb schafft eine x-Achse mit nur 10 Werte statt 12. Ich ging davon aus, dass das OP eine x-Achse mit 12 Werten beibehalten wollte. –

+0

@JoshuaUlrich Dann kannst du dich nicht darauf verlassen, dass R die x-Variable für dich als '1: length (x)' erzeugt. Eine Lösung besteht darin, den '1: length (x)' - Index selbst zu bilden und ihn an die Daten zu binden, und dann 'na.omit()' diese Matrix. Das sollte das gleiche Ergebnis wie Ihre Interpolation ergeben, ohne tatsächlich zu interpolieren - es gibt nicht wirklich einen Bedarf dafür, dass alles, was Sie tun möchten, nur die Punkte verbindet; einen Punkt dort zu platzieren, wo es 'NA' gibt, ist eine andere Sache, natürlich. –

+0

+1 Sehr schön ... –

5

Ein anderer Weg, der den fehlenden Wert in den gleichen Stellen

data=data.frame(x=1:12,y=test) 
plot(data) 
lines(data) 
lines(na.omit(data),col=2) 

Oder in ggplot2

ggplot(data,aes(x,y))+geom_point()+geom_line(data=na.omit(data)) 
Verwandte Themen