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.

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.
[...] 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 |