Truco R. Valores perdidos a 0, ejemplo de uso de sapply

Muy habitual partinos la cabeza con valores perdidos en R. Los NA pueden darnos algún quebradero de cabeza. Este truco es muy sencillo, transforma valores  missing a 0 y nos sirve para aplicar funciones a data.frame con la función sapply. Veamos el sencillo ejemplo:


x=c(1,23,5,9,0,NA)
y=c(5,45,NA,78,NA,34)
dataf=data.frame(cbind(x,y))
mean(dataf$x,na.rm=TRUE)
mean(dataf$y,na.rm=TRUE)
#Podría interesarnos tener en cuenta los NAs
sum(dataf$x,na.rm=TRUE)/nrow(dataf)
sum(dataf$y,na.rm=TRUE)/nrow(dataf)

Tenemos un data.frame con dos variables que contienen valores perdidos, deseamos crear una función que  pase estos valores a 0 y aplicarlo al data.frame de partida:


haz.cero.na=function(x){
ifelse(is.na(x),0,x)}
dataf.2=data.frame(sapply(dataf,haz.cero.na))
dataf
dataf.2

Un ejemplo muy sencillo de aplicación de funciones con sapply a data.frames perfectamente extrapolable a matrices y vectores. Erreros tiene una entrada al respecto. Saludos.

4 comentarios en “Truco R. Valores perdidos a 0, ejemplo de uso de sapply

  1. Estoy iniciando un curso de R en la UnADM. y no se que es el valor NA. se refieren a el pero el PDF que nos guía no lo define. si alguien me pudiera ayudar.
    Gracias.

    1. NA son los datos no incluidos en la base de datos o en la encuesta que deberían haber sido llenados. Se les denomina NA por convencionalismo. Cuando se depura una base de datos se encuentran estos blancos y los estadísticos deben tomar una decisión para seguir analizando:
      a. sustituyen los NA por cero.
      b.Sustituyen los NA por algún valor , realizando un supuesto.

  2. hola yo tengo una base de datos y uso el survey tengo una variable, ingresos de la cual quiero eliminar los ceros para hallar el promedio de ingresos cuando pongo >0 y uso svymean(ingresos, el diseño muestral que para mi caso es diseño), el resultado es cualquier cosa, pueden ayudarme con esto? gracias

  3. Buenas tardes, dispongo de dos vectores de diferente longitud. Necesito hacer las diferencias entre cada uno de los elementos de un vector vs. el otro, solo que al realizar esas diferencias, deberìa hacer el primer elemento de x menos el primer elemento de y, el segundo de x menos el segundo de y….y asì sucesivamente.
    Mis vectores, creados a partir de una columna de un dataframe, estàn ordenados vector_ordenado<-data[order(data[,"x"]),] solo que a veces falta uno de los elementos de uno de los vectores, el segundo en el vector_ordenado 1 pero no falta en el vector_ordenado 2. Sin embargo, las diferencias entre vectores debo hacerlas segùn el orden. Se me ocurrio que por ej al faltar un elemento en uno de los vectores pueda completar con dato faltante (na), de manera que al estimar una diferencia resulte en un NA.
    Es posible hacer esto?
    Desde ya muchas gracias

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

[bws_google_captcha]