Quería saber como reemplazar un valor por otro en un vector, por ejemplo, tengo un vector v=c(1,2,3,1,2,3,5,4,1), como reempalzar el valor 1 por cero para conseguir v=c(0,2,3,0,2,3,5,4,0). Estoy usando la función "replace" y no me sale bien. Gracias [[alternative HTML version deleted]]
prueba replace(v,which(v==1),0) o bien as.numeric(sub(1,0,v)) Un saludo. Olivier -- ____________________________________ Olivier G. Nuñez Email: onunez@iberstat.es Tel : +34 663 03 69 09 Web: http.//www.iberstat.es ____________________________________ El 14/03/2009, a las 13:54, José M. Nevado escribió:> v=c(1,2,3,1,2,3,5,4,1)[[alternative HTML version deleted]]
Francisco Javier Castrillon Meneses
2009-Mar-14 13:47 UTC
[R-es] REEMPLAZO DE VALORES EN VECTOR
Howdy. José! Oliver Núñez responded your question as follows: Either replace(v,which(v==1),0) or as.numeric(sub(1,0,v)) works. fjcastri ----- Original Message ----- From: José M. Nevado <josemanevado at gmail.com> Date: Saturday, March 14, 2009 7:56 am Subject: [R-es] REEMPLAZO DE VALORES EN VECTOR To: r-help-es at r-project.org> Quería saber como reemplazar un valor por otro en un vector, > por ejemplo, tengo un vector v=c(1,2,3,1,2,3,5,4,1), como reempalzar > el > valor 1 por cero para conseguir v=c(0,2,3,0,2,3,5,4,0). > > Estoy usando la función "replace" y no me sale bien. > > Gracias > > [[alternative HTML version deleted]] > > > _______________________________________________ > R-help-es mailing list > R-help-es at r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es >
Buenos dias José, Además de las opciones ya mencionadas, también puedes usar indexación (1), ifelse (2) o la función recode (3) en la libreria car como se muestra a continuación: # Opción (1) v=c(1,2,3,1,2,3,5,4,1) v==1 v[v==1]<-0 v # Opción (2) v=c(1,2,3,1,2,3,5,4,1) ifelse(v==1,0,v) # Opción (3) # install.packages(car) require(car) recode(v, "1=0") Para mayor información puedes explorar ?ifelse y ?recode {car}. Espero sea de utilidad, Jorge Ivan Velez [E] jorgeivanvelez@gmail.com On Sat, Mar 14, 2009 at 8:54 AM, José M. Nevado <josemanevado@gmail.com>wrote:> Quería saber como reemplazar un valor por otro en un vector, > por ejemplo, tengo un vector v=c(1,2,3,1,2,3,5,4,1), como reempalzar el > valor 1 por cero para conseguir v=c(0,2,3,0,2,3,5,4,0). > > Estoy usando la función "replace" y no me sale bien. > > Gracias > > [[alternative HTML version deleted]] > > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es > >[[alternative HTML version deleted]]
ifelse , la propuesta más elegante, a mi juico. Gracias Jorge. -- ____________________________________ Olivier G. Nuñez Email: onunez@iberstat.es Tel : +34 663 03 69 09 Web: http.//www.iberstat.es ____________________________________ El 14/03/2009, a las 16:52, Jorge Ivan Velez escribió:> Buenos dias José, > > Además de las opciones ya mencionadas, también puedes usar > indexación (1), > ifelse (2) o la función recode (3) en la libreria car como se > muestra a > continuación: > > # Opción (1) > v=c(1,2,3,1,2,3,5,4,1) > v==1 > v[v==1]<-0 > v > > # Opción (2) > v=c(1,2,3,1,2,3,5,4,1) > ifelse(v==1,0,v) > > # Opción (3) > # install.packages(car) > require(car) > recode(v, "1=0") > > Para mayor información puedes explorar ?ifelse y ?recode {car}. > > Espero sea de utilidad, > > Jorge Ivan Velez > [E] jorgeivanvelez@gmail.com > > > On Sat, Mar 14, 2009 at 8:54 AM, José M. Nevado > <josemanevado@gmail.com>wrote: > >> Quería saber como reemplazar un valor por otro en un vector, >> por ejemplo, tengo un vector v=c(1,2,3,1,2,3,5,4,1), como >> reempalzar el >> valor 1 por cero para conseguir v=c(0,2,3,0,2,3,5,4,0). >> >> Estoy usando la función "replace" y no me sale bien. >> >> Gracias >> >> [[alternative HTML version deleted]] >> >> >> _______________________________________________ >> 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[[alternative HTML version deleted]]
Buenas tardes José, Cuatro de las opciones enviadas para solucionar el problema que describiste en el email enviado fueron las siguientes: # Vector v v=c(1,2,3,1,2,3,5,4,1) # Opción 1 replace(v,which(v==1),0) # [1] 0 2 3 0 2 3 5 4 0 # Opción 2 -- modificación de la anterior replace(v,v==1,0) # [1] 0 2 3 0 2 3 5 4 0 # Opción 3 ifelse(v==1,0,v) # [1] 0 2 3 0 2 3 5 4 0 # Opción 4 -- indexación v2<-v v2[v2==1]<-0 v2 # [1] 0 2 3 0 2 3 5 4 0 Como puedes ver, con todas puedes hacer lo que necesitas. Sin embargo, hay un punto importante que debes tener en cuenta para escoger una de las cuatro y se trata del tiempo de ejecución cuando se tienen vectores de gran longitud. A continuación encontrarás una muestra de ello: # Usando 100000 replicaciones para cada opción # y calculando el tiempo de ejecución system.time(replicate(100000, replace(v,which(v==1),0)),0) # user system elapsed # 2.50 0.02 2.58 system.time(replicate(100000, replace(v,v==1,0)),0) # user system elapsed # 0.83 0.00 0.86 system.time(replicate(100000, ifelse(v==1,0,v)),0) # user system elapsed # 4.09 0.02 4.36 Si bien ifelse() parece ser la opción más elegante, no es la más eficiente. Ahora, usar which() dentro de replicate, aunque funciona, aumenta el tiempo de ejecución para vectores grandes. En este escenario, lo mejor utilizar replicate() sin el which() interior. Por otro lado, si creamos una función f de la forma f<-function(x) { x[x==1]<-0 x } que ejecute la 4ta opción, las cosas parecen mejorar: system.time(replicate(100000, f(v)),0) # user system elapsed # 0.77 0.00 0.80 Estoy trabajando con R 2.8.1 Patched, Windows XP SP2, 4GB de RAM y procesador Core 2-Duo de 2.4 GHz. Esta es mi sessionInfo(): R version 2.8.1 Patched (2009-03-09 r48093) i386-pc-mingw32 locale: LC_COLLATE=English_United States.1252;LC_CTYPE=English_United States.1252;LC_MONETARY=English_United States.1252;LC_NUMERIC=C;LC_TIME=English_United States.1252 attached base packages: [1] stats graphics grDevices utils datasets methods base Espero sea de utilidad, Jorge Ivan Velez On Sat, Mar 14, 2009 at 8:54 AM, José M. Nevado <josemanevado@gmail.com>wrote:> Quería saber como reemplazar un valor por otro en un vector, > por ejemplo, tengo un vector v=c(1,2,3,1,2,3,5,4,1), como reempalzar el > valor 1 por cero para conseguir v=c(0,2,3,0,2,3,5,4,0). > > Estoy usando la función "replace" y no me sale bien. > > Gracias > > [[alternative HTML version deleted]] > > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es > >[[alternative HTML version deleted]]