¿Cómo eliminar los NAs al principio y al final de un dataframe en R?
Estoy intentando interpolar algunos valores por grupo utilizando zoo:na.approx
. El dataframe debe comenzar y terminar con valores no NA. ¿Hay alguna manera de eliminarlos pero mantener los NA “internos”? No puedo usar un filtro basado en otras variables ya que la interpolación se realiza por grupos y los valores faltantes varían entre ellos.
Aquí tienes un ejemplo de mi código:
library(zoo)
library(lubridate)
library(dplyr)
set.seed(471)
db <- rep(seq(ymd("2021-12-20"), ymd("2021-12-30"), by = "days"),4) %>% merge(seq(1,4,1)) %>%
mutate(z=rnorm(176))
db$z[db$z<0] <- NA
db %>% group_by(y) %>% mutate(aa=na.approx(z))
davy.ai
Sí, es posible eliminar los primeros y últimos valores no NA de cada grupo manteniendo los NA internos. Puedes lograr esto aplicando primero
na.approx
a toda la columna y luego usando los verbos dedplyr
comolead
ylag
para eliminar los primeros y últimos valores no NA.Aquí tienes un código de ejemplo que demuestra este enfoque:
En este código, primero agrupamos por la variable
y
y aplicamosna.approx
a la variablez
usandomutate
. Luego, usamosungroup
para eliminar la agrupación y aplicamosif_else
para eliminar los primeros y últimos valores no NA usandolag
ylead
. La columna resultanteaa
tendrá los valores interpolados paraz
con los primeros y últimos valores no NA eliminados.