valores valor una reemplazar por perdidos otro modificar eliminar datos con como columna cambiar agrupar r dataframe na

valor - reemplazar na en r



R: reemplazo de NA en un cuadro de datos con valores en la misma posiciĆ³n en otro cuadro de datos (4)

Tengo un marco de datos con algunos valores de NA:

dfa <- data.frame(a=c(1,NA,3,4,5,NA),b=c(1,5,NA,NA,8,9),c=c(7,NA,NA,NA,2,NA)) dfa

Me gustaría reemplazar los NA con valores en la misma posición en otro marco de datos:

dfrepair <- data.frame(a=c(2:7),b=c(6:1),c=c(8:3)) dfrepair

Lo intenté:

dfa1 <- dfa dfa1 <- ifelse(dfa == NA, dfrepair, dfa) dfa1

pero esto no funciono.


En el tidyverse, puede usar purrr::map2_df , que es una versión estrictamente bivariada de mapply que se simplifica en un data.frame, y dplyr::coalesce , que reemplaza los valores de NA en su primer argumento con los correspondientes en el segundo.

library(tidyverse) dfrepair %>% mutate_all(as.numeric) %>% # coalesce is strict about types map2_df(dfa, ., coalesce) ## # A tibble: 6 × 3 ## a b c ## <dbl> <dbl> <dbl> ## 1 1 1 7 ## 2 3 5 7 ## 3 3 4 6 ## 4 4 3 5 ## 5 5 8 2 ## 6 7 9 3


Podemos usar Map from base R para hacer una comparación en columnas entre los dos conjuntos de datos

dfa[] <- Map(function(x,y) {x[is.na(x)] <- y[is.na(x)]; x}, dfa, dfrepair) dfa # a b c #1 1 1 7 #2 3 5 7 #3 3 4 6 #4 4 3 5 #5 5 8 2 #6 7 9 3


Tu puedes hacer:

dfa <- data.frame(a=c(1,NA,3,4,5,NA),b=c(1,5,NA,NA,8,9),c=c(7,NA,NA,NA,2,NA)) dfrepair <- data.frame(a=c(2:7),b=c(6:1),c=c(8:3)) dfa[is.na(dfa)] <- dfrepair[is.na(dfa)] dfa a b c 1 1 1 7 2 3 5 7 3 3 4 6 4 4 3 5 5 5 8 2 6 7 9 3


dfa <- data.frame(a=c(1,NA,3,4,5,NA),b=c(1,5,NA,NA,8,9),c=c(7,NA,NA,NA,2,NA)) dfa dfrepair <- data.frame(a=c(2:7),b=c(6:1),c=c(8:3)) dfrepair library(dplyr) coalesce(as.numeric(dfa), as.numeric(dfrepair)) a b c 1 1 1 7 2 3 5 7 3 3 4 6 4 4 3 5 5 5 8 2 6 7 9 3

Como el código en dplyr está escrito en C ++, es más rápido en la mayoría de los casos. Otra ventaja importante es que tanto la coalesce como muchas otras funciones dplyr son las mismas en SQL. Usando dplyr aprendes SQL codificando en R ;-)