Hola No es lo mismo pero en mi caso personal la forma que utilizo se basa en el ejemplo de http://cran.r-project.org/doc/contrib/grafi3.pdf página 49, no usa el if pero también hay una condición para todos los verdaderos. No intenté en este caso en particular, habría que ver si también da problemas, pero como Carlos Ortega que sabe mucho dio una solución y como vos estas empezando no quiero confundirte, Javier Marcuzzi El 26/02/14 12:49, Carlos Ortega escribió:> Hola, > > No he encontrado la razón de que la explicación sea estrictamente la > presencia de NAs. > Por este contraejemplo: > >> val <- guaran[44,] >> val > parc. sp pap91 pap96 pap01 pap06 pap11 x y > 44 c.1 T.stans *<NA>* nuevo 47 muerto *<NA>* 149 52 >> ifelse( > + val$sp=="L.lucidum" | val$pap11 == "muerto" > + | val$pap06=="muerto" | val$pap01=="muerto" > + | val$pap96=="muerto", 1, 0 > + ) > [1] *1* *#Devuelve bien el valor el ifelse a pesar de que hay NAs.* >> val <- guaran[45,] >> val > parc. sp pap91 pap96 pap01 pap06 pap11 x y > 45 c.1 C.lilloi *<NA>* *<NA> *nuevo 54 53 159 42 >> ifelse( > + val$sp=="L.lucidum" | val$pap11 == "muerto" > + | val$pap06=="muerto" | val$pap01=="muerto" > + | val$pap96=="muerto", 1, 0 > + ) > [1] *NA* *# Pero en este otro caso que debería ser "1" devuelve un "NA".* > > Al aplicar el "ifelse" es a partir de la fila 45 donde comienzan a aparecer > los "NA", aunque en múltiples filas anteriores hay valores NA. > > Pero sí que es cierto que al quitar todos los NAs el problema se resuelve. > El siguiente código quita los NA, aplica el ifelse creando la nueva columna > y vuelve a darte a ponerte los NAs que tenías al principio.... > > #------------------------------------------------------------------------- > # Sustituyo los NA por ZZ > guaran <- dat.in[,c(1:9)] > for (i in 1:dim(guaran)[2]) { > guaran[is.na(guaran[,i]),i] <- c("ZZ") > } > #head(guaran,25) > > #Compruebo que funciona el ifelse > guaran$datmatriz <- ifelse( > guaran$sp == "L.lucidum" | guaran$pap11 == "muerto" > | guaran$pap06 == "muerto" | guaran$pap01 == "muerto" > | guaran$pap96 == "muerto", 1, 0 > ) > #head(guaran,50) > > #Devuelvo el data.frame al estado original > # Pero con la columna del ifelse ya añadida y evaluada > for (i in 1:dim(guaran)[2]) { > guaran[guaran[,i]=="ZZ",i] <- NA > } > > #head(guaran,50) > #------------------------------------------------------------------------- > > > Saludos, > Carlos Ortega > www.qualityexcellence.es > > > > > El 26 de febrero de 2014, 15:23, Priscila Ana Powell < > priscilaapowell@gmail.com> escribió: > >> Hola gente!! Estoy empezando a trabajar con R, y no puedo resolver lo >> siguiente: >> >> Quiero crear una nueva variable (datmatriz) que toma el valor de 1 si: >> -la variable sp es igual a L.lucidum >> -alguna de las variables pap11, pap06, pap01, pap96 es igual a muerto. >> >> El script que utilicé es : >> >> guaran$datmatriz<-ifelse (guaran$sp=="L.lucidum"|guaran$pap11 =>> "muerto"|guaran$pap06=="muerto"|guaran$pap01=="muerto"|guaran$pap96=="muerto", >> 1, 0) >> >> Sin embargo, al observar datmatriz, tengo 0, 1 y NA, que no sé que los >> genera. >> >> Alguna idea para salvar el inconveniente? >> >> adjunto la matriz >> >> desde ya, muchas gracias!! >> >> >> saludos ! >> >> Priscila >> -- >> Priscila Ana Powell >> Instituto de Ecología Regional >> Facultad de Ciencias Naturales e Instituto Miguel Lillo >> Universidad Nacional de Tucumán >> Argentina >> >> _______________________________________________ >> R-help-es mailing list >> R-help-es@r-project.org >> https://stat.ethz.ch/mailman/listinfo/r-help-es >> >> > > > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es[[alternative HTML version deleted]]
Priscila, Los NA aparecen porque en la condición: guaran$sp=="L.lucidum"|guaran$pap11 ="muerto"|guaran$pap06=="muerto"|guaran$pap01=="muerto"|guaran$pap96=="muerto" hay alguna columna que es NA. Por ejemplo en la línea 46: c.1 P.porphyria <NA> <NA> nuevo 34 38 157 44 NA la cuarta columan es pap96. Si los NA están en columnas que no son evaluadas por la condición, no se debieran generan NA. No revisé caso por caso para ver si esto se cumple pero hace sentido para mi. Para resolver el problema lo mejor es que sigas lo propuesto por Francisco Viciana. Si lo que quieres es ignorar las columnas con NA y seguir buscando en las otras entonces reemplaza los NA por otra variable en las columnas que usas y terminado vuelve a poner en su lugar los NA. Ten mucho cuidado si haces esto, y solo si lo permite el problema que tratas de resolver. Espero te sirva para entender por que aparecen los NA en tu ejemplo. Daniel Merino El 26 de febrero de 2014, 13:41, "Marcuzzi, Javier Rubén" < javier.ruben.marcuzzi@gmail.com> escribió:> Hola > > No es lo mismo pero en mi caso personal la forma que utilizo se basa en > el ejemplo de http://cran.r-project.org/doc/contrib/grafi3.pdf página > 49, no usa el if pero también hay una condición para todos los verdaderos. > > No intenté en este caso en particular, habría que ver si también da > problemas, pero como Carlos Ortega que sabe mucho dio una solución y > como vos estas empezando no quiero confundirte, > > Javier Marcuzzi > > > El 26/02/14 12:49, Carlos Ortega escribió: > > Hola, > > > > No he encontrado la razón de que la explicación sea estrictamente la > > presencia de NAs. > > Por este contraejemplo: > > > >> val <- guaran[44,] > >> val > > parc. sp pap91 pap96 pap01 pap06 pap11 x y > > 44 c.1 T.stans *<NA>* nuevo 47 muerto *<NA>* 149 52 > >> ifelse( > > + val$sp=="L.lucidum" | val$pap11 == "muerto" > > + | val$pap06=="muerto" | val$pap01=="muerto" > > + | val$pap96=="muerto", 1, 0 > > + ) > > [1] *1* *#Devuelve bien el valor el ifelse a pesar de que hay NAs.* > >> val <- guaran[45,] > >> val > > parc. sp pap91 pap96 pap01 pap06 pap11 x y > > 45 c.1 C.lilloi *<NA>* *<NA> *nuevo 54 53 159 42 > >> ifelse( > > + val$sp=="L.lucidum" | val$pap11 == "muerto" > > + | val$pap06=="muerto" | val$pap01=="muerto" > > + | val$pap96=="muerto", 1, 0 > > + ) > > [1] *NA* *# Pero en este otro caso que debería ser "1" devuelve un "NA".* > > > > Al aplicar el "ifelse" es a partir de la fila 45 donde comienzan a > aparecer > > los "NA", aunque en múltiples filas anteriores hay valores NA. > > > > Pero sí que es cierto que al quitar todos los NAs el problema se > resuelve. > > El siguiente código quita los NA, aplica el ifelse creando la nueva > columna > > y vuelve a darte a ponerte los NAs que tenías al principio.... > > > > > #------------------------------------------------------------------------- > > # Sustituyo los NA por ZZ > > guaran <- dat.in[,c(1:9)] > > for (i in 1:dim(guaran)[2]) { > > guaran[is.na(guaran[,i]),i] <- c("ZZ") > > } > > #head(guaran,25) > > > > #Compruebo que funciona el ifelse > > guaran$datmatriz <- ifelse( > > guaran$sp == "L.lucidum" | guaran$pap11 == "muerto" > > | guaran$pap06 == "muerto" | guaran$pap01 == "muerto" > > | guaran$pap96 == "muerto", 1, 0 > > ) > > #head(guaran,50) > > > > #Devuelvo el data.frame al estado original > > # Pero con la columna del ifelse ya añadida y evaluada > > for (i in 1:dim(guaran)[2]) { > > guaran[guaran[,i]=="ZZ",i] <- NA > > } > > > > #head(guaran,50) > > > #------------------------------------------------------------------------- > > > > > > Saludos, > > Carlos Ortega > > www.qualityexcellence.es > > > > > > > > > > El 26 de febrero de 2014, 15:23, Priscila Ana Powell < > > priscilaapowell@gmail.com> escribió: > > > >> Hola gente!! Estoy empezando a trabajar con R, y no puedo resolver lo > >> siguiente: > >> > >> Quiero crear una nueva variable (datmatriz) que toma el valor de 1 si: > >> -la variable sp es igual a L.lucidum > >> -alguna de las variables pap11, pap06, pap01, pap96 es igual a muerto. > >> > >> El script que utilicé es : > >> > >> guaran$datmatriz<-ifelse (guaran$sp=="L.lucidum"|guaran$pap11 => >> > "muerto"|guaran$pap06=="muerto"|guaran$pap01=="muerto"|guaran$pap96=="muerto", > >> 1, 0) > >> > >> Sin embargo, al observar datmatriz, tengo 0, 1 y NA, que no sé que los > >> genera. > >> > >> Alguna idea para salvar el inconveniente? > >> > >> adjunto la matriz > >> > >> desde ya, muchas gracias!! > >> > >> > >> saludos ! > >> > >> Priscila > >> -- > >> Priscila Ana Powell > >> Instituto de Ecología Regional > >> Facultad de Ciencias Naturales e Instituto Miguel Lillo > >> Universidad Nacional de Tucumán > >> Argentina > >> > >> _______________________________________________ > >> R-help-es mailing list > >> R-help-es@r-project.org > >> https://stat.ethz.ch/mailman/listinfo/r-help-es > >> > >> > > > > > > > > _______________________________________________ > > R-help-es mailing list > > R-help-es@r-project.org > > https://stat.ethz.ch/mailman/listinfo/r-help-es > > > [[alternative HTML version deleted]] > > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es > >-- Daniel [[alternative HTML version deleted]]
El problema puede estar en el no uso de suficientes paréntesis. Por ejemplo, con:> a=1 > b=0 > c=0la instrucción ifelse(((a>1) | (b=0) | (c=1) | (d=1)), 11, 22) da el resultado esperado: [1] 11 Pero si se omiten los paréntesis se llega a un error de interpretación: destino de la asignación se expande a un objeto fuera del lenguaje Espero que sirva Jorge El 26/2/14, daniel <daniel319 en gmail.com> escribió:> Priscila, > > Los NA aparecen porque en la condición: > > guaran$sp=="L.lucidum"|guaran$pap11 => "muerto"|guaran$pap06=="muerto"|guaran$pap01=="muerto"|guaran$pap96=="muerto" > > hay alguna columna que es NA. Por ejemplo en la línea 46: > > c.1 P.porphyria <NA> <NA> nuevo 34 38 157 44 NA > > la cuarta columan es pap96. Si los NA están en columnas que no son > evaluadas por la condición, no se debieran generan NA. No revisé caso por > caso para ver si esto se cumple pero hace sentido para mi. > > Para resolver el problema lo mejor es que sigas lo propuesto por Francisco > Viciana. > > Si lo que quieres es ignorar las columnas con NA y seguir buscando en las > otras entonces reemplaza los NA por otra variable en las columnas que usas > y terminado vuelve a poner en su lugar los NA. Ten mucho cuidado si haces > esto, y solo si lo permite el problema que tratas de resolver. > > Espero te sirva para entender por que aparecen los NA en tu ejemplo. > > Daniel Merino > > > > El 26 de febrero de 2014, 13:41, "Marcuzzi, Javier Rubén" < > javier.ruben.marcuzzi en gmail.com> escribió: > >> Hola >> >> No es lo mismo pero en mi caso personal la forma que utilizo se basa en >> el ejemplo de http://cran.r-project.org/doc/contrib/grafi3.pdf página >> 49, no usa el if pero también hay una condición para todos los >> verdaderos. >> >> No intenté en este caso en particular, habría que ver si también da >> problemas, pero como Carlos Ortega que sabe mucho dio una solución y >> como vos estas empezando no quiero confundirte, >> >> Javier Marcuzzi >> >> >> El 26/02/14 12:49, Carlos Ortega escribió: >> > Hola, >> > >> > No he encontrado la razón de que la explicación sea estrictamente la >> > presencia de NAs. >> > Por este contraejemplo: >> > >> >> val <- guaran[44,] >> >> val >> > parc. sp pap91 pap96 pap01 pap06 pap11 x y >> > 44 c.1 T.stans *<NA>* nuevo 47 muerto *<NA>* 149 52 >> >> ifelse( >> > + val$sp=="L.lucidum" | val$pap11 == "muerto" >> > + | val$pap06=="muerto" | val$pap01=="muerto" >> > + | val$pap96=="muerto", 1, 0 >> > + ) >> > [1] *1* *#Devuelve bien el valor el ifelse a pesar de que hay NAs.* >> >> val <- guaran[45,] >> >> val >> > parc. sp pap91 pap96 pap01 pap06 pap11 x y >> > 45 c.1 C.lilloi *<NA>* *<NA> *nuevo 54 53 159 42 >> >> ifelse( >> > + val$sp=="L.lucidum" | val$pap11 == "muerto" >> > + | val$pap06=="muerto" | val$pap01=="muerto" >> > + | val$pap96=="muerto", 1, 0 >> > + ) >> > [1] *NA* *# Pero en este otro caso que debería ser "1" devuelve un >> > "NA".* >> > >> > Al aplicar el "ifelse" es a partir de la fila 45 donde comienzan a >> aparecer >> > los "NA", aunque en múltiples filas anteriores hay valores NA. >> > >> > Pero sí que es cierto que al quitar todos los NAs el problema se >> resuelve. >> > El siguiente código quita los NA, aplica el ifelse creando la nueva >> columna >> > y vuelve a darte a ponerte los NAs que tenías al principio.... >> > >> > >> #------------------------------------------------------------------------- >> > # Sustituyo los NA por ZZ >> > guaran <- dat.in[,c(1:9)] >> > for (i in 1:dim(guaran)[2]) { >> > guaran[is.na(guaran[,i]),i] <- c("ZZ") >> > } >> > #head(guaran,25) >> > >> > #Compruebo que funciona el ifelse >> > guaran$datmatriz <- ifelse( >> > guaran$sp == "L.lucidum" | guaran$pap11 == "muerto" >> > | guaran$pap06 == "muerto" | guaran$pap01 == "muerto" >> > | guaran$pap96 == "muerto", 1, 0 >> > ) >> > #head(guaran,50) >> > >> > #Devuelvo el data.frame al estado original >> > # Pero con la columna del ifelse ya añadida y evaluada >> > for (i in 1:dim(guaran)[2]) { >> > guaran[guaran[,i]=="ZZ",i] <- NA >> > } >> > >> > #head(guaran,50) >> > >> #------------------------------------------------------------------------- >> > >> > >> > Saludos, >> > Carlos Ortega >> > www.qualityexcellence.es >> > >> > >> > >> > >> > El 26 de febrero de 2014, 15:23, Priscila Ana Powell < >> > priscilaapowell en gmail.com> escribió: >> > >> >> Hola gente!! Estoy empezando a trabajar con R, y no puedo resolver lo >> >> siguiente: >> >> >> >> Quiero crear una nueva variable (datmatriz) que toma el valor de 1 si: >> >> -la variable sp es igual a L.lucidum >> >> -alguna de las variables pap11, pap06, pap01, pap96 es igual a muerto. >> >> >> >> El script que utilicé es : >> >> >> >> guaran$datmatriz<-ifelse (guaran$sp=="L.lucidum"|guaran$pap11 =>> >> >> "muerto"|guaran$pap06=="muerto"|guaran$pap01=="muerto"|guaran$pap96=="muerto", >> >> 1, 0) >> >> >> >> Sin embargo, al observar datmatriz, tengo 0, 1 y NA, que no sé que los >> >> genera. >> >> >> >> Alguna idea para salvar el inconveniente? >> >> >> >> adjunto la matriz >> >> >> >> desde ya, muchas gracias!! >> >> >> >> >> >> saludos ! >> >> >> >> Priscila >> >> -- >> >> Priscila Ana Powell >> >> Instituto de Ecología Regional >> >> Facultad de Ciencias Naturales e Instituto Miguel Lillo >> >> Universidad Nacional de Tucumán >> >> Argentina >> >> >> >> _______________________________________________ >> >> R-help-es mailing list >> >> R-help-es en r-project.org >> >> https://stat.ethz.ch/mailman/listinfo/r-help-es >> >> >> >> >> > >> > >> > >> > _______________________________________________ >> > R-help-es mailing list >> > R-help-es en r-project.org >> > https://stat.ethz.ch/mailman/listinfo/r-help-es >> >> >> [[alternative HTML version deleted]] >> >> >> _______________________________________________ >> R-help-es mailing list >> R-help-es en r-project.org >> https://stat.ethz.ch/mailman/listinfo/r-help-es >> >> > > > -- > Daniel > > [[alternative HTML version deleted]] > >