Conectando a través de valores perdidos con geom_line

Estoy tratando de averiguar si es posible conectarse entre los valores perdidos usando geom_line. Por ejemplo, en el siguiente enlace faltan valores en el momento 3 en la faceta F. Me gustaría una línea para conectar el tiempo 2 y 4 en ese caso. ¿Hay una manera de lograr esto?

https://farm8.staticflickr.com/7061/6964089563_b150e0c2a6.jpg

Tengo un dataframe de valores acumulativos como ese:

head(cumulative) individual series Time Value 1 A x 1 -1.008821 2 A x 2 -2.273712 3 A x 3 -3.430610 4 A x 4 -4.618860 5 A x 5 -4.893075 6 A x 6 -5.836532 

Con el que estoy ttwigndo:

 ggplot(cumulative, aes(x=Time,y=Value, shape=series)) + geom_point() + geom_line(aes(linetype=series)) + facet_wrap(~ individual, ncol=3) 

La respuesta de Richie es muy completa, pero quería mostrar algo más simple. Como las líneas no se dibujan a los puntos NA , otro enfoque es soltar estos puntos al dibujar líneas. Esto implícitamente hace una interpolación lineal entre puntos (como lo hacen las líneas rectas).

Usando dfr de la respuesta de Richie, sin necesitar el cálculo de z step:

 ggplot(dfr, aes(x,y)) + geom_point() + geom_line(data=dfr[!is.na(dfr$y),]) 

En ese caso, en este caso, la subconjunto podría hacerse para todo el asunto.

 ggplot(dfr[!is.na(dfr$y),], aes(x,y)) + geom_point() + geom_line() 

Las líneas no se dibujan si un valor es NA . Debe reemplazarlos interpolando los puntos que faltan. Hay muchos algoritmos diferentes para la interpolación, necesita experimentar con varios y ver cuál se adapta mejor a sus datos. Este ejemplo utiliza interpolación lineal a través de interp1 en el paquete pracma .

Data de muestra:

 dfr < - data.frame( x = 1:10, y = runif(10) ) dfr[c(3, 6, 7), "y"] <- NA 

Paso de interpolación

 dfr$z < - with(dfr, interp1(x, y, x, "linear")) 

Compara ttwigs:

 ggplot(dfr, aes(x, y)) + geom_line() ggplot(dfr, aes(x, z)) + geom_line() 

Si está mostrando este gráfico a otras personas, asegúrese de marcar claramente los lugares donde ha sintetizado datos mediante la interpolación (tal vez usando líneas de puntos).


Actualización basada en comentario:
Puede especificar diferentes estéticas para diferentes geoms.

 ggplot(dfr, aes(x)) + geom_point(aes(y = y)) + geom_line(aes(y = z)) 

Para incorporar diferentes tipos de línea para y faltante / no perdido, puede hacer algo como

 ggplot(dfr, aes(x)) + geom_point(aes(y = y)) + geom_line(aes(y = y)) + geom_line(aes(y = z), linetype = "dotted")