Acerca de…

el blog de jaume

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.

Advertisement

9 febrero, 2011 - Publicado por | open source, R |

3 comentarios »

  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

    Comentario por Carlos | 17 marzo, 2011 | Responder

  2. Hola.

    La verdad es que queda más aseado. Me tomo nota.
    Muchas gracias Carlos.

    Comentario por Jaume | 21 marzo, 2011 | Responder

  3. [...] se si recordáis aquella entrada en que os describía como hacer que R nos preguntara cunado había encontrado un [...]

    Pingback por Acerca de… listas de especies « Acerca de… | 27 enero, 2012 | Responder


Deja un comentario

Fill in your details below or click an icon to log in:

Logo de WordPress.com

You are commenting using your WordPress.com account. Log Out / Cambiar )

Twitter picture

You are commenting using your Twitter account. Log Out / Cambiar )

Facebook photo

You are commenting using your Facebook account. Log Out / Cambiar )

Connecting to %s