Acerca de… hacer que R nos pregunte

Hola,

A veces cuando estamos analizando datos, nos salen resultados raros que nos hacen revisar los dataframes en busca de pequeños errores. Normalmente estos errores son cosas sistemáticas producidas por la importación de los datos, valores perdidos, etc. que se pueden solucionar fácilmente con replace() o cosas así. Pero a veces cada pequeño error necesita que lo revisemos y tomemos una decisión.

Aquí os presento una cosa que he descubierto par enfrentarme a ese problema… bueno, supongo que los erreros añejos lo tiene superado. La cosa es esta, tengo información sobre una serie de especies que aparecen o no en unas parcelas. De otra base de datos he obtenido si dichas especies son anuales o perennes, pero no todas las especies de mi dataframe están en la base de datos, así que me quedan especies con NA. Pero necesito ir especie a especie confirmando si es a o p. Lo que he hecho es esto:

Mis datos:

Spxparc<-data.frame(especie=c(rep("sp1",5),rep("sp2",4),rep("sp3",2),rep("sp4",5),rep("sp6",4))
                   ,parcela=c(c(1:5),c(1:4),c(1,2),c(1:5),c(1:4))
                   ,anuper=c("a","p",NA,"a","p",rep("a",10),NA,NA,NA,NA,NA)
                   )

Lo que quiero es que R vaya de NA en NA y me pregunte:


#para cada fila del df
for(i in c(1:nrow(Spxparc)))
{
  #si en esa fila anuper es NA
  while(is.na(Spxparc$anuper[i]))
  {
    #enseñale al usuario a que especie corresponde
    print(Spxparc$especie[i])
    #pidele al usuario que te diga si esa especie es a o p
    input<-scan(n=1,what="character")
    #escribe lo que te diga el usuario en la tabla
    Spxparc$anuper[i]<-input
  }
}

Esto es todo. Espero que os sea útil.

Anuncios

3 pensamientos en “Acerca de… hacer que R nos pregunte

  1. Hola Jaume.
    Muy interesante el blog, adelante con él. Acerca del código que has escrito, se me han ocurrido un par de cambios pequeños que hacen que muestren menos información no deseada. Ahí van:

    Spxparc<-data.frame(especie=c(rep("sp1",5),rep("sp2",4),rep("sp3",2),rep("sp4",5),rep("sp6",4))
    ,parcela=c(c(1:5),c(1:4),c(1,2),c(1:5),c(1:4))
    ,anuper=c("a","p",NA,"a","p",rep("a",10),NA,NA,NA,NA,NA))

    Lo que quiero es que R vaya de NA en NA y me pregunte:

    #para cada fila del df
    for(i in c(1:nrow(Spxparc)))
    {
    #si en esa fila anuper es NA
    if(is.na(Spxparc$anuper[i]))
    {
    #enseñale al usuario a que especie corresponde
    print(Spxparc$especie[i],max.levels=0)
    #pidele al usuario que te diga si esa especie es a o p
    input<-scan(n=1,what="character")
    #escribe lo que te diga el usuario en la tabla
    Spxparc$anuper[i]<-input
    }
    }

    Saludos

  2. Pingback: Acerca de… listas de especies « Acerca de…

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s