es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Interpolar los valores NA cuando la columna termina en NA.

Tengo una columna con datos numéricos con NA y también con NA al final:

df <- data.frame(
  Diam_av = c(12.3, 13, 15.5, NA, NA, NA, NA, 13.7, NA, NA, NA, 9.98, 4.0, 8.76, NA, NA, NA)
)

Quiero interpolar los valores faltantes. Esto funciona bien con la función na.approx de zoo siempre y cuando haya valores límite positivos para interpolar, pero falla si, como en mi caso, uno de los valores límite es NA (al final de la columna Diam_av):

library(zoo)
df %>%
  mutate(Diam_intpl = na.approx(Diam_av))
Error: Problem with `mutate()` input `Diam_intpl`.
x Input `Diam_intpl` can't be recycled to size 18.
ℹ Input `Diam_intpl` is `na.approx(Diam_av)`.
ℹ Input `Diam_intpl` must be size 18 or 1, not 15. 

¿Alguna idea de cómo excluir/neutralizar los valores NA al final de la columna?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Una solución para excluir/neutralizar los valores NA finales de las columnas es utilizar el parámetro na.rm en na.approx, el cual elimina todos los NAs finales del vector antes de la interpolación. Esto se puede lograr utilizando la función na.trim del paquete zoo antes de aplicar na.approx:

    library(zoo)
    df %>%
      mutate(Diam_intpl = na.approx(na.trim(Diam_av), na.rm = FALSE))
    

    La función na.trim elimina todos los NAs finales por defecto, y el parámetro na.rm en na.approx se establece en FALSE para evitar cualquier eliminación adicional de NAs. Esto debería permitir una interpolación exitosa de los datos faltantes.

Comments are closed.