Nuevamente necesito ayuda, parece que en lugar de aprender ¿desaprendo? Es un problema sencillo, cosas que uno ya hacía y ahora por arte de magia no salen. Se trata sobre apply (esta vez no intente con programación). La intención es crear una columna en el data.frame donde coloco palabras o NA, de acuerdo a una columna donde está todo codificado. Posiblemente se entiende mejor copiando y pegando los ejemplos en R que escribo a continuación, en entonces_quiero está el resultado final (deseado). # creo algunos datos x<-c(1,2,3,4,5,6) y<-c(1,2,''p'',''s'',''s'',''p'') # Lo deseo acomodar de la siguiente forma (estilo survival) quiero_p <-c(NA,NA,''p'',NA,NA,''p'') quiero_s <-c(NA,NA,NA,''s'',''s'',NA) entonces_quiero<-data.frame(x,y,quiero_p,quiero_s) entonces_quiero # funcion para el caso ''s'' ver <- function(x){ if (x==''s'') {y <- ''s'' return(y)} else {y<-NA return(y)} } # pruebo la función para valores ingresados de a uno y a mano ver("p") ver("s") ver(1) ver(2) # los valores dados por la función ver son los correctos. #youtube ejemplo http://www.youtube.com/watch?v=WR8ftX-GJoE ceros <- function(x){if(x<3){x=0}else{x=1}} apply(entonces_quiero[,1:2], c(1,2), ceros) # pero no apply(entonces_quiero, c(1,2), ceros) # probando mi función "ver" como la funcion "ceros" (solo para la segunda columna. Me da un error apply(entonces_quiero[,2], c(1,2),ver) # también probe algo como <- function(x){if(x==''s''){x==''s''}else{x==NA}} # # es algo medio tonto, documentado en todos lados, pero tengo un problema y no me doy cuenta # hoy me canse de cometer errores con esto [[alternative HTML version deleted]]
Hola Javier, No usé apply, pero tal vez te sirva. Tomé tus mismos datos y nombres para el desarrollo: x<-c(1,2,3,4,5,6) y<-c(1,2,'p','s','s','p') entonces_quiero<-data.frame(x,y) # es el data al que quieres añadir las columnas # “quiero_p” y “quiero_s” con las características indicadas, entonces_quiero$quiero_p<-y entonces_quiero$quiero_s<-y entonces_quiero$quiero_p [entonces_quiero$quiero_p!='p']<-NA entonces_quiero$quiero_s [entonces_quiero$quiero_s!='s']<-NA entonces_quiero$quiero_p<-factor(entonces_quiero$quiero_p) entonces_quiero$quiero_s<-factor(entonces_quiero$quiero_s) # “entonces_quiero” quedó como deseabas Saludos Gloria ----- Original Message Follows ----- From: Javier Marcuzzi <javier.ruben.marcuzzi en gmail.com> To: r-help-es en r-project.org Subject: [R-es] apply Date: Tue, 11 Oct 2011 17:57:24 -0300> Nuevamente necesito ayuda, parece que en lugar de aprender > ¿desaprendo? Es un problema sencillo, cosas que uno ya > hacía y ahora por arte de magia no salen. > > Se trata sobre apply (esta vez no intente con > programación). La intención es crear una columna en el > data.frame donde coloco palabras o NA, de acuerdo a una > columna donde está todo codificado. Posiblemente se > entiende mejor copiando y pegando los ejemplos en R que > escribo a continuación, en entonces_quiero está el > resultado final (deseado). > > # creo algunos datos > x<-c(1,2,3,4,5,6) > y<-c(1,2,'p','s','s','p') > # Lo deseo acomodar de la siguiente forma (estilo > survival) quiero_p <-c(NA,NA,'p',NA,NA,'p') > quiero_s <-c(NA,NA,NA,'s','s',NA) > entonces_quiero<-data.frame(x,y,quiero_p,quiero_s) > entonces_quiero > # funcion para el caso 's' > ver <- function(x){ > if (x=='s') {y <- 's' > return(y)} > else {y<-NA > return(y)} > } > # pruebo la función para valores ingresados de a uno y a > mano ver("p") > ver("s") > ver(1) > ver(2) > # los valores dados por la función ver son loscorrectos.> > > #youtube ejemplo > http://www.youtube.com/watch?v=WR8ftX-GJoE ceros <- > function(x){if(x<3){x=0}else{x=1}} > apply(entonces_quiero[,1:2], c(1,2), ceros) # pero no > apply(entonces_quiero, c(1,2), ceros) > > # probando mi función "ver" como la funcion "ceros"(solo> para la segunda columna. Me da un error > apply(entonces_quiero[,2], c(1,2),ver) > # también probe algo como <- > function(x){if(x=='s'){x=='s'}else{x==NA}} # > # es algo medio tonto, documentado en todos lados, pero > tengo un problema y no me doy cuenta > # hoy me canse de cometer errores con esto > > [[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 >___________________________________________________________________________ Aviso: =El contenido del presente e-mail y sus posibles adjuntos pertenecen al INTA y pueden contener información confidencial. Si usted no es el destinatario original de este mensaje y por este medio pudo acceder a dicha información, por favor solicitamos contactar al remitente y eliminar el mensaje de inmediato. Se encuentra prohibida la divulgación, copia, distribución o cualquier otro uso de la información contenida en el presente e-mail por parte de personas distintas al destinatario. This e-mail contents and its possible attachments belong to INTA and may contain confidential information. If this message was not originally addressed to you, but you have accessed to such information by this means, please contact the sender and eliminate this message immediately. Circulation, copy, distribution, or any other use of the information contained in this e-mail is not allowed on part of those different from the addressee. Antes de imprimir este mensaje, asegúrese de que sea necesario. Proteger el medio ambiente está también en su mano.
Hola Javier, No usé apply, pero tal vez te sirva. Tomé tus mismos datos y nombres para el desarrollo: x<-c(1,2,3,4,5,6) y<-c(1,2,'p','s','s','p') entonces_quiero<-data.frame(x,y) # es el data al que quieres añadir las columnas # “quiero_p” y “quiero_s” con las características indicadas: entonces_quiero$quiero_p<-y entonces_quiero$quiero_s<-y entonces_quiero$quiero_p[entonces_quiero$quiero_p!='p']<-NA entonces_quiero$quiero_s[entonces_quiero$quiero_s!='s']<-NA entonces_quiero$quiero_p<-factor(entonces_quiero$quiero_p) entonces_quiero$quiero_s<-factor(entonces_quiero$quiero_s) # “entonces_quiero” quedó como deseabas Saludos Gloria ----- Original Message Follows ----- From: Javier Marcuzzi <javier.ruben.marcuzzi en gmail.com> To: r-help-es en r-project.org Subject: [R-es] apply Date: Tue, 11 Oct 2011 17:57:24 -0300> Nuevamente necesito ayuda, parece que en lugar de aprender > ¿desaprendo? Es un problema sencillo, cosas que uno ya > hacía y ahora por arte de magia no salen. > > Se trata sobre apply (esta vez no intente con > programación). La intención es crear una columna en el > data.frame donde coloco palabras o NA, de acuerdo a una > columna donde está todo codificado. Posiblemente se > entiende mejor copiando y pegando los ejemplos en R que > escribo a continuación, en entonces_quiero está el > resultado final (deseado). > > # creo algunos datos > x<-c(1,2,3,4,5,6) > y<-c(1,2,'p','s','s','p') > # Lo deseo acomodar de la siguiente forma (estilo > survival) quiero_p <-c(NA,NA,'p',NA,NA,'p') > quiero_s <-c(NA,NA,NA,'s','s',NA) > entonces_quiero<-data.frame(x,y,quiero_p,quiero_s) > entonces_quiero > # funcion para el caso 's' > ver <- function(x){ > if (x=='s') {y <- 's' > return(y)} > else {y<-NA > return(y)} > } > # pruebo la función para valores ingresados de a uno y a > mano ver("p") > ver("s") > ver(1) > ver(2) > # los valores dados por la función ver son loscorrectos.> > > #youtube ejemplo > http://www.youtube.com/watch?v=WR8ftX-GJoE ceros <- > function(x){if(x<3){x=0}else{x=1}} > apply(entonces_quiero[,1:2], c(1,2), ceros) # pero no > apply(entonces_quiero, c(1,2), ceros) > > # probando mi función "ver" como la funcion "ceros"(solo> para la segunda columna. Me da un error > apply(entonces_quiero[,2], c(1,2),ver) > # también probe algo como <- > function(x){if(x=='s'){x=='s'}else{x==NA}} # > # es algo medio tonto, documentado en todos lados, pero > tengo un problema y no me doy cuenta > # hoy me canse de cometer errores con esto > > [[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 >___________________________________________________________________________ Aviso: =El contenido del presente e-mail y sus posibles adjuntos pertenecen al INTA y pueden contener información confidencial. Si usted no es el destinatario original de este mensaje y por este medio pudo acceder a dicha información, por favor solicitamos contactar al remitente y eliminar el mensaje de inmediato. Se encuentra prohibida la divulgación, copia, distribución o cualquier otro uso de la información contenida en el presente e-mail por parte de personas distintas al destinatario. This e-mail contents and its possible attachments belong to INTA and may contain confidential information. If this message was not originally addressed to you, but you have accessed to such information by this means, please contact the sender and eliminate this message immediately. Circulation, copy, distribution, or any other use of the information contained in this e-mail is not allowed on part of those different from the addressee. Antes de imprimir este mensaje, asegúrese de que sea necesario. Proteger el medio ambiente está también en su mano.
Muchas gracia a ambos. Ahora funciona, pero hay algo que no entiendo: apply(entonces_quiero[,1:2], c(1,2),ver) funciona, pero no para una sola columna. Una de mis opciónes que dió resultado fué: yy <- entonces_quiero[,2] yyy<-tapply(yy, ver) Nuevamente gracias. Javier El 11 de octubre de 2011 21:35, María Gloria Monterubbianesi < gmonterubbianesi@balcarce.inta.gov.ar> escribió:> Hola Javier, > > No usé apply, pero tal vez te sirva. Tomé tus mismos > datos y nombres para el desarrollo: > > x<-c(1,2,3,4,5,6) > y<-c(1,2,''p'',''s'',''s'',''p'') > entonces_quiero<-data.frame(x,y) # es el data al que quieres > añadir las columnas > # “quiero_p” y “quiero_s” con las características > indicadas, > > entonces_quiero$quiero_p<-y > entonces_quiero$quiero_s<-y > > entonces_quiero$quiero_p > [entonces_quiero$quiero_p!=''p'']<-NA > entonces_quiero$quiero_s > [entonces_quiero$quiero_s!=''s'']<-NA > > entonces_quiero$quiero_p<-factor(entonces_quiero$quiero_p) > entonces_quiero$quiero_s<-factor(entonces_quiero$quiero_s) > > # “entonces_quiero” quedó como deseabas > > Saludos > Gloria > > > ----- Original Message Follows ----- > From: Javier Marcuzzi <javier.ruben.marcuzzi@gmail.com> > To: r-help-es@r-project.org > Subject: [R-es] apply > Date: Tue, 11 Oct 2011 17:57:24 -0300 > > > Nuevamente necesito ayuda, parece que en lugar de aprender > > ¿desaprendo? Es un problema sencillo, cosas que uno ya > > hacía y ahora por arte de magia no salen. > > > > Se trata sobre apply (esta vez no intente con > > programación). La intención es crear una columna en el > > data.frame donde coloco palabras o NA, de acuerdo a una > > columna donde está todo codificado. Posiblemente se > > entiende mejor copiando y pegando los ejemplos en R que > > escribo a continuación, en entonces_quiero está el > > resultado final (deseado). > > > > # creo algunos datos > > x<-c(1,2,3,4,5,6) > > y<-c(1,2,''p'',''s'',''s'',''p'') > > # Lo deseo acomodar de la siguiente forma (estilo > > survival) quiero_p <-c(NA,NA,''p'',NA,NA,''p'') > > quiero_s <-c(NA,NA,NA,''s'',''s'',NA) > > entonces_quiero<-data.frame(x,y,quiero_p,quiero_s) > > entonces_quiero > > # funcion para el caso ''s'' > > ver <- function(x){ > > if (x==''s'') {y <- ''s'' > > return(y)} > > else {y<-NA > > return(y)} > > } > > # pruebo la función para valores ingresados de a uno y a > > mano ver("p") > > ver("s") > > ver(1) > > ver(2) > > # los valores dados por la función ver son los > correctos. > > > > > > #youtube ejemplo > > http://www.youtube.com/watch?v=WR8ftX-GJoE ceros <- > > function(x){if(x<3){x=0}else{x=1}} > > apply(entonces_quiero[,1:2], c(1,2), ceros) # pero no > > apply(entonces_quiero, c(1,2), ceros) > > > > # probando mi función "ver" como la funcion "ceros" > (solo > > para la segunda columna. Me da un error > > apply(entonces_quiero[,2], c(1,2),ver) > > # también probe algo como <- > > function(x){if(x==''s''){x==''s''}else{x==NA}} # > > # es algo medio tonto, documentado en todos lados, pero > > tengo un problema y no me doy cuenta > > # hoy me canse de cometer errores con esto > > > > [[alternative HTML version deleted]] > > > > > > > > _______________________________________________ > > R-help-es mailing list > > R-help-es@r-project.org > > https://stat.ethz.ch/mailman/listinfo/r-help-es > > > ___________________________________________________________________________ > > Aviso: > > El contenido del presente e-mail y sus posibles adjuntos pertenecen al INTA > y pueden contener información confidencial. Si usted no es el destinatario > original de este mensaje y por este medio pudo acceder a dicha información, > por favor solicitamos contactar al remitente y eliminar el mensaje de > inmediato. Se encuentra prohibida la divulgación, copia, distribución o > cualquier otro uso de la información contenida en el presente e-mail por > parte de personas distintas al destinatario. > > > This e-mail contents and its possible attachments belong to INTA and may > contain confidential information. If this message was not originally > addressed to you, but you have accessed to such information by this means, > please contact the sender and eliminate this message immediately. > Circulation, copy, distribution, or any other use of the information > contained in this e-mail is not allowed on part of those different from the > addressee. > > > Antes de imprimir este mensaje, asegúrese de que sea necesario. Proteger el > medio ambiente está también en su mano. >[[alternative HTML version deleted]]
No necesitas apply para hacer lo que pretendes. Pero si quieres que funciones adecua mente con apply la función ver tienes que vectorilizarla. Cambiala de este manera: # ------- ver <- function(x){ return ( ifelse (x==''s'', ''s'', NA)) } # ------- # Asi puedes usar apply, con alguna pequeña modificación apply(entonces_quiero[,1:2], c(1,2),ver) apply(data.frame(entonces_quiero[,2]), c(1),ver) # Pero el apply anterior no reporta utilidad alguna, Lo habituar es # utilizarlo con funciones de agregación: como sum(), mean() ... # Cuando no es el caso es más sencillo emplear directamente la función: ver(entonces_quiero[,1:2]) ver(entonces_quiero[,2]) El 12/10/2011 14:14, Javier Marcuzzi escribió:> Muchas gracia a ambos. > > Ahora funciona, pero hay algo que no entiendo: > apply(entonces_quiero[,1:2], c(1,2),ver) > funciona, pero no para una sola columna. > > Una de mis opciónes que dió resultado fué: > yy<- entonces_quiero[,2] > yyy<-tapply(yy, ver) > > Nuevamente gracias. > > Javier > > El 11 de octubre de 2011 21:35, María Gloria Monterubbianesi< > gmonterubbianesi@balcarce.inta.gov.ar> escribió: > >> Hola Javier, >> >> No usé apply, pero tal vez te sirva. Tomé tus mismos >> datos y nombres para el desarrollo: >> >> x<-c(1,2,3,4,5,6) >> y<-c(1,2,''p'',''s'',''s'',''p'') >> entonces_quiero<-data.frame(x,y) # es el data al que quieres >> añadir las columnas >> # "quiero_p" y "quiero_s" con las características >> indicadas, >> >> entonces_quiero$quiero_p<-y >> entonces_quiero$quiero_s<-y >> >> entonces_quiero$quiero_p >> [entonces_quiero$quiero_p!=''p'']<-NA >> entonces_quiero$quiero_s >> [entonces_quiero$quiero_s!=''s'']<-NA >> >> entonces_quiero$quiero_p<-factor(entonces_quiero$quiero_p) >> entonces_quiero$quiero_s<-factor(entonces_quiero$quiero_s) >> >> # "entonces_quiero" quedó como deseabas >> >> Saludos >> Gloria >> >> >> ----- Original Message Follows ----- >> From: Javier Marcuzzi<javier.ruben.marcuzzi@gmail.com> >> To: r-help-es@r-project.org >> Subject: [R-es] apply >> Date: Tue, 11 Oct 2011 17:57:24 -0300 >> >>> Nuevamente necesito ayuda, parece que en lugar de aprender >>> ¿desaprendo? Es un problema sencillo, cosas que uno ya >>> hacía y ahora por arte de magia no salen. >>> >>> Se trata sobre apply (esta vez no intente con >>> programación). La intención es crear una columna en el >>> data.frame donde coloco palabras o NA, de acuerdo a una >>> columna donde está todo codificado. Posiblemente se >>> entiende mejor copiando y pegando los ejemplos en R que >>> escribo a continuación, en entonces_quiero está el >>> resultado final (deseado). >>> >>> # creo algunos datos >>> x<-c(1,2,3,4,5,6) >>> y<-c(1,2,''p'',''s'',''s'',''p'') >>> # Lo deseo acomodar de la siguiente forma (estilo >>> survival) quiero_p<-c(NA,NA,''p'',NA,NA,''p'') >>> quiero_s<-c(NA,NA,NA,''s'',''s'',NA) >>> entonces_quiero<-data.frame(x,y,quiero_p,quiero_s) >>> entonces_quiero >>> # funcion para el caso ''s'' >>> ver<- function(x){ >>> if (x==''s'') {y<- ''s'' >>> return(y)} >>> else {y<-NA >>> return(y)} >>> } >>> # pruebo la función para valores ingresados de a uno y a >>> mano ver("p") >>> ver("s") >>> ver(1) >>> ver(2) >>> # los valores dados por la función ver son los >> correctos. >>> >>> #youtube ejemplo >>> http://www.youtube.com/watch?v=WR8ftX-GJoE ceros<- >>> function(x){if(x<3){x=0}else{x=1}} >>> apply(entonces_quiero[,1:2], c(1,2), ceros) # pero no >>> apply(entonces_quiero, c(1,2), ceros) >>> >>> # probando mi función "ver" como la funcion "ceros" >> (solo >>> para la segunda columna. Me da un error >>> apply(entonces_quiero[,2], c(1,2),ver) >>> # también probe algo como<- >>> function(x){if(x==''s''){x==''s''}else{x==NA}} # >>> # es algo medio tonto, documentado en todos lados, pero >>> tengo un problema y no me doy cuenta >>> # hoy me canse de cometer errores con esto >>> >>> [[alternative HTML version deleted]] >>> >>> >>> >>> _______________________________________________ >>> R-help-es mailing list >>> R-help-es@r-project.org >>> https://stat.ethz.ch/mailman/listinfo/r-help-es >>> >> ___________________________________________________________________________ >> >> Aviso: >> >> El contenido del presente e-mail y sus posibles adjuntos pertenecen al INTA >> y pueden contener información confidencial. Si usted no es el destinatario >> original de este mensaje y por este medio pudo acceder a dicha información, >> por favor solicitamos contactar al remitente y eliminar el mensaje de >> inmediato. Se encuentra prohibida la divulgación, copia, distribución o >> cualquier otro uso de la información contenida en el presente e-mail por >> parte de personas distintas al destinatario. >> >> >> This e-mail contents and its possible attachments belong to INTA and may >> contain confidential information. If this message was not originally >> addressed to you, but you have accessed to such information by this means, >> please contact the sender and eliminate this message immediately. >> Circulation, copy, distribution, or any other use of the information >> contained in this e-mail is not allowed on part of those different from the >> addressee. >> >> >> Antes de imprimir este mensaje, asegúrese de que sea necesario. Proteger el >> medio ambiente está también en su mano. >> > [[alternative HTML version deleted]] > > > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es-- +-------------------------------------------------------------- | Francisco J. Viciana Fernández | Coordinador del Registro de Población | Servicio de Estadísticas Demográficas y Sociales | Instituto de Estadística y Cartografía de Andalucía | Leonardo Da Vinci, nº 21. Isla de La Cartuja. | 41071 SEVILLA. | franciscoj.viciana@juntadeandalucia.es +-------------------------------------------------------------- [[alternative HTML version deleted]]