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.
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
Hola.
La verdad es que queda más aseado. Me tomo nota.
Muchas gracias Carlos.
Pingback: Acerca de… listas de especies « Acerca de…