transformar - valores faltantes en r




Conectando a través de valores perdidos con geom_line (2)

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

Usando dfr de la respuesta de Richie, sin necesidad de calcular el paso z :

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

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

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

Estoy tratando de averiguar si es posible conectarse a través de los valores faltantes utilizando geom_line. Por ejemplo, en el enlace de abajo hay valores faltantes en el momento 3 en la faceta F. Me gustaría que una línea conectara los tiempos 2 y 4 en ese caso. ¿Hay una manera de lograr esto?

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

Tengo un marco de datos de valores acumulativos como tal:

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

Que estoy conspirando con:

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

Las líneas no se dibujan si un valor es NA . Debe reemplazarlos mediante la interpolación de los puntos faltantes. 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 la 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"))

Comparar parcelas:

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 los datos mediante la interpolación (tal vez utilizando líneas de puntos).

Actualización basada en el comentario:
Puedes 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 faltante, 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")