2013-03-20 11 views
7

lascia prendere questo esempio:Come collegare punti in cui mancano valori?

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

     plot(test,type="l") 

Ciò trama di prova, ma non si collegherà i dots.Is c'è un modo possiamo ignorare le AN e collegare i punti in modo da ottenere abbastanza grafico?

risposta

7

Non c'è un modo per ignorare i valori mancanti. È necessario sostituirli con valori interpolati.

# 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

Esiste! E tu non hai bisogno di interpolazione ... :-) Grazie per il testa a testa - Ho modificato la mia risposta per tenere conto del caso d'uso che hai anticipato. –

9

Uno opzioni è:

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

Se si desidera mantenere l'asse x che va 1-length(test) poi:

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

Ma che rimuove i valori mancanti e quindi crea un asse x con solo il 10 valori invece di 12. Ho pensato che l'OP volesse mantenere un asse x con 12 valori. –

+0

@JoshuaUlrich Quindi non puoi fare affidamento su R generando la variabile x come '1: length (x)'. Una soluzione è formattare l'indice '1: length (x)' e collegarlo ai dati e quindi 'na.omit()' quella matrice. Questo dovrebbe dare lo stesso risultato della tua interpolazione senza in realtà interpolare - non c'è davvero alcun bisogno di quel dare che tutto ciò che vuoi fare è unire i punti; mettere un punto in cui ci sono 'NA's è una cosa diversa, naturalmente. –

+0

+1 Molto bello ... –

5

Un altro modo che preserva il valore mancante negli stessi punti

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

o in ggplot2

ggplot(data,aes(x,y))+geom_point()+geom_line(data=na.omit(data)) 
Problemi correlati