Guillermo.Vinue en uv.es
2012-Jan-04 09:07 UTC
[R-es] Reemplazar valores en un vector dado otro
Hola, Tengo un vector llamado “neig” y querría sustituir sus valores dados por el vector “etiqs_nuevas”, por los valores de “etiqs_orig” que ocupen la misma posición. Por ejemplo, si neig[1] es un 8, lo reemplazaría por el valor 17 porque el valor 17 ocupa la misma posición en “etiqs_orig” que el valor 8 en “etiqs_nuevas”.>neig[1] 8 8 8 2 5 5 8 8 8 8 8 2 8 12 5 12 12 5 11 13 7 7 14 14 13 12 12 14 14 14 8 6 12 8 5 8 5 5 13 8 12 5 8 5 5 3 6>etiqs_nuevas[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14>etiqs_orig[1] 1 6 8 12 14 15 16 17 18 20 21 22 23 24 He hecho el siguiente bucle for, pero me encuentro ante un problema. for(i in 1:length(etiqs_orig)){ neig[neig == etiqs_nuevas[i]] <- etiqs_orig[i] } Se trata de que por ejemplo, para i=2, el valor 2 se me transforma en un 6 que es lo que quiero, pero cuando i=6, ese valor 6 surgido de sustituir a 2 se me transforma en un 15. Por tanto, el valor 2 finalmente aparece sustituido por el valor 15, cuando yo querría que fuera el valor 6. ¿Cómo podría escribir que un valor ya sustituido no se vuelva a sustituir?, ¿alguien conoce una forma rápida de hacerlo?, si no, creo que me veo obligado a escribir muchas líneas de código. También he probado con la función replace pero no me da el resultado que necesito. replace(neig,etiqs_nuevas,etiqs_orig) Muchas gracias de antemano y feliz año a tod en s. Un saludo, Guillermo
Hola, He planteado el bucle de otra forma y si lo he entendido bien, hace lo que buscas> > neig<-c(8,8, 8, 2,5, 5, 8, 8, 8, 8, 8, 2, 8, 12, 5, 12, 12, 5, 11, 13, 7, 7, 14, 14, 13, 12, 12, + 14, 14 ,14, 8, 6, 12, 8, 5, 8, 5, 5, 13, 8, 12, 5, 8, 5, 5, 3, 6)> > e.or<-c(1, 6, 8, 12, 14, 15, 16, 17, 18, 20, 21, 22, 23, 24)> > n.et<-0> for(i in 1:length(neig)) {+ n.et[i]<-e.or[neig[i]]+ }> > n.et [1] 17 17 17 6 14 14 17 17 17 17 17 6 17 22 14 22 22 14 21 23 16 16 24[24] 24 23 22 22 24 24 24 17 15 22 17 14 17 14 14 23 17 22 14 17 14 14 8 [47] 15>Saludos, Carlos Ortega www.qualityexcellence.es El 4 de enero de 2012 10:07, <Guillermo.Vinue@uv.es> escribió:> Hola, > > Tengo un vector llamado “neig” y querría sustituir sus valores dados por > el vector “etiqs_nuevas”, por los valores de “etiqs_orig” que ocupen la > misma posición. > > Por ejemplo, si neig[1] es un 8, lo reemplazaría por el valor 17 porque > el valor 17 ocupa la misma posición en “etiqs_orig” que el valor 8 en > “etiqs_nuevas”. > > >neig > [1] 8 8 8 2 5 5 8 8 8 8 8 2 8 12 5 12 12 5 11 13 7 7 14 > 14 13 > 12 12 14 14 14 8 6 12 8 5 8 5 5 13 8 12 5 8 5 5 3 6 > > > >etiqs_nuevas > > [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 > > > >etiqs_orig > > [1] 1 6 8 12 14 15 16 17 18 20 21 22 23 24 > > > He hecho el siguiente bucle for, pero me encuentro ante un problema. > > for(i in 1:length(etiqs_orig)){ > > neig[neig == etiqs_nuevas[i]] <- etiqs_orig[i] > > } > > Se trata de que por ejemplo, para i=2, el valor 2 se me transforma en un > 6 que es lo que quiero, pero cuando i=6, ese valor 6 surgido de > sustituir a 2 se me transforma en un 15. > Por tanto, el valor 2 finalmente aparece sustituido por el valor 15, > cuando yo querría que fuera el valor 6. > > ¿Cómo podría escribir que un valor ya sustituido no se vuelva a > sustituir?, ¿alguien conoce una forma rápida de hacerlo?, si no, creo > que me veo obligado a escribir muchas líneas de código. > > También he probado con la función replace pero no me da el resultado que > necesito. > > replace(neig,etiqs_nuevas,etiqs_orig) > > > Muchas gracias de antemano y feliz año a tod@s. > > Un saludo, > > Guillermo > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es >[[alternative HTML version deleted]]
Guillermo.Vinue en uv.es
2012-Jan-04 09:52 UTC
[R-es] Reemplazar valores en un vector dado otro
Hola Carlos, sí que hace lo que busco. Muchas gracias por tu ayuda. Un saludo, Guillermo> Hola, > > He planteado el bucle de otra forma y si lo he entendido bien, hace lo que > buscas > > > > neig<-c(8,8, 8, 2,5, 5, 8, 8, 8, 8, 8, 2, 8, 12, 5, 12,12, 5, 11, 13, 7, 7, 14, 14, 13, 12, 12, + 14, 14 ,14, 8, 6, 12, 8, 5, 8, 5, 5, 13, 8, 12, 5, 8, 5, 5, 3, 6)> > e.or<-c(1, 6, 8, 12, 14, 15, 16, 17, 18, 20, 21, 22, 23, 24)> > n.et<-0> for(i in 1:length(neig)) {+ n.et[i]<-e.or[neig[i]]+ }> > n.et [1] 17 17 17 6 14 14 17 17 17 17 17 6 17 22 14 22 22 14 21 23 16 16 24> [24] 24 23 22 22 24 24 24 17 15 22 17 14 17 14 14 23 17 22 14 17 14 14 8 > [47] 15 > > > > > > > > Saludos, > Carlos Ortega > www.qualityexcellence.es > > El 4 de enero de 2012 10:07, <Guillermo.Vinue en uv.es> escribió: > > > Hola, > > > > Tengo un vector llamado “neig” y querría sustituir sus valores dados por > > el vector “etiqs_nuevas”, por los valores de “etiqs_orig” que ocupen la > > misma posición. > > > > Por ejemplo, si neig[1] es un 8, lo reemplazaría por el valor 17 porque > > el valor 17 ocupa la misma posición en “etiqs_orig” que el valor 8 en > > “etiqs_nuevas”. > > > > >neig > > [1] 8 8 8 2 5 5 8 8 8 8 8 2 8 12 5 12 12 5 11 13 7 7 14 > > 14 13 > > 12 12 14 14 14 8 6 12 8 5 8 5 5 13 8 12 5 8 5 5 3 6 > > > > > > >etiqs_nuevas > > > > [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 > > > > > > >etiqs_orig > > > > [1] 1 6 8 12 14 15 16 17 18 20 21 22 23 24 > > > > > > He hecho el siguiente bucle for, pero me encuentro ante un problema. > > > > for(i in 1:length(etiqs_orig)){ > > > > neig[neig == etiqs_nuevas[i]] <- etiqs_orig[i] > > > > } > > > > Se trata de que por ejemplo, para i=2, el valor 2 se me transforma en un > > 6 que es lo que quiero, pero cuando i=6, ese valor 6 surgido de > > sustituir a 2 se me transforma en un 15. > > Por tanto, el valor 2 finalmente aparece sustituido por el valor 15, > > cuando yo querría que fuera el valor 6. > > > > ¿Cómo podría escribir que un valor ya sustituido no se vuelva a > > sustituir?, ¿alguien conoce una forma rápida de hacerlo?, si no, creo > > que me veo obligado a escribir muchas líneas de código. > > > > También he probado con la función replace pero no me da el resultado que > > necesito. > > > > replace(neig,etiqs_nuevas,etiqs_orig) > > > > > > Muchas gracias de antemano y feliz año a tod en s. > > > > Un saludo, > > > > Guillermo > > > > _______________________________________________ > > R-help-es mailing list > > R-help-es en r-project.org > > https://stat.ethz.ch/mailman/listinfo/r-help-es > > >
Hola, He probado esta opción que **evita el bucle** y funciona igualmente:> e.or[neig] [1] 17 17 17 6 14 14 17 17 17 17 17 6 17 22 14 22 22 14 21 23 16 16 24[24] 24 23 22 22 24 24 24 17 15 22 17 14 17 14 14 23 17 22 14 17 14 14 8 [47] 15> Saludos, Carlos Ortega www.qualityexcellence.es El 4 de enero de 2012 10:52, <Guillermo.Vinue@uv.es> escribió:> Hola Carlos, sí que hace lo que busco. > > Muchas gracias por tu ayuda. > > Un saludo, > > Guillermo > > > Hola, > > > > He planteado el bucle de otra forma y si lo he entendido bien, hace lo > que > > buscas > > > > > > neig<-c(8,8, 8, 2,5, 5, 8, 8, 8, 8, 8, 2, 8, 12, 5, 12, > 12, 5, 11, 13, 7, 7, 14, 14, 13, 12, 12, + 14, 14 ,14, 8, > 6, 12, 8, 5, 8, 5, 5, 13, 8, 12, 5, 8, 5, 5, 3, 6)> > > e.or<-c(1, 6, 8, 12, 14, 15, 16, 17, 18, 20, 21, 22, 23, 24)> > > n.et<-0> for(i in 1:length(neig)) {+ n.et[i]<-e.or[neig[i]]+ }> > > n.et [1] 17 17 17 6 14 14 17 17 17 17 17 6 17 22 14 22 22 14 21 23 16 > 16 24 > > [24] 24 23 22 22 24 24 24 17 15 22 17 14 17 14 14 23 17 22 14 17 14 14 8 > > [47] 15 > > > > > > > > > > > > > > > Saludos, > > Carlos Ortega > > www.qualityexcellence.es > > > > El 4 de enero de 2012 10:07, <Guillermo.Vinue@uv.es> escribió: > > > > > Hola, > > > > > > Tengo un vector llamado “neig” y querría sustituir sus valores dados > por > > > el vector “etiqs_nuevas”, por los valores de “etiqs_orig” que ocupen la > > > misma posición. > > > > > > Por ejemplo, si neig[1] es un 8, lo reemplazaría por el valor 17 porque > > > el valor 17 ocupa la misma posición en “etiqs_orig” que el valor 8 en > > > “etiqs_nuevas”. > > > > > > >neig > > > [1] 8 8 8 2 5 5 8 8 8 8 8 2 8 12 5 12 12 5 11 13 7 7 14 > > > 14 13 > > > 12 12 14 14 14 8 6 12 8 5 8 5 5 13 8 12 5 8 5 5 3 6 > > > > > > > > > >etiqs_nuevas > > > > > > [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 > > > > > > > > > >etiqs_orig > > > > > > [1] 1 6 8 12 14 15 16 17 18 20 21 22 23 24 > > > > > > > > > He hecho el siguiente bucle for, pero me encuentro ante un problema. > > > > > > for(i in 1:length(etiqs_orig)){ > > > > > > neig[neig == etiqs_nuevas[i]] <- etiqs_orig[i] > > > > > > } > > > > > > Se trata de que por ejemplo, para i=2, el valor 2 se me transforma en > un > > > 6 que es lo que quiero, pero cuando i=6, ese valor 6 surgido de > > > sustituir a 2 se me transforma en un 15. > > > Por tanto, el valor 2 finalmente aparece sustituido por el valor 15, > > > cuando yo querría que fuera el valor 6. > > > > > > ¿Cómo podría escribir que un valor ya sustituido no se vuelva a > > > sustituir?, ¿alguien conoce una forma rápida de hacerlo?, si no, creo > > > que me veo obligado a escribir muchas líneas de código. > > > > > > También he probado con la función replace pero no me da el resultado > que > > > necesito. > > > > > > replace(neig,etiqs_nuevas,etiqs_orig) > > > > > > > > > Muchas gracias de antemano y feliz año a tod@s. > > > > > > Un saludo, > > > > > > Guillermo > > > > > > _______________________________________________ > > > R-help-es mailing list > > > R-help-es@r-project.org > > > https://stat.ethz.ch/mailman/listinfo/r-help-es > > > > > > > >[[alternative HTML version deleted]]
Guillermo.Vinue en uv.es
2012-Jan-04 11:54 UTC
[R-es] Reemplazar valores en un vector dado otro
Hola Carlos, muchas gracias también por esta segunda solución. Un saludo, Guillermo> Hola, > > He probado esta opción que **evita el bucle** y funciona igualmente: > > > e.or[neig] [1] 17 17 17 6 14 14 17 17 17 17 17 6 17 22 14 22 22 1421 23 16 16 24> [24] 24 23 22 22 24 24 24 17 15 22 17 14 17 14 14 23 17 22 14 17 14 14 8 > [47] 15> > > > > Saludos, > Carlos Ortega > www.qualityexcellence.es > > El 4 de enero de 2012 10:52, <Guillermo.Vinue en uv.es> escribió: > > > Hola Carlos, sí que hace lo que busco. > > > > Muchas gracias por tu ayuda. > > > > Un saludo, > > > > Guillermo > > > > > Hola, > > > > > > He planteado el bucle de otra forma y si lo he entendido bien, hace lo > > que > > > buscas > > > > > > > > neig<-c(8,8, 8, 2,5, 5, 8, 8, 8, 8, 8, 2, 8, 12, 5, 12, > > 12, 5, 11, 13, 7, 7, 14, 14, 13, 12, 12, + 14, 14 ,14, 8, > > 6, 12, 8, 5, 8, 5, 5, 13, 8, 12, 5, 8, 5, 5, 3, 6)> > > > e.or<-c(1, 6, 8, 12, 14, 15, 16, 17, 18, 20, 21, 22, 23, 24)> > > > n.et<-0> for(i in 1:length(neig)) {+ n.et[i]<-e.or[neig[i]]+ }> > > > n.et [1] 17 17 17 6 14 14 17 17 17 17 17 6 17 22 14 22 22 14 21 23 16 > > 16 24 > > > [24] 24 23 22 22 24 24 24 17 15 22 17 14 17 14 14 23 17 22 14 1714 14 8> > > [47] 15 > > > > > > > > > > > > > > > > > > > > > > Saludos, > > > Carlos Ortega > > > www.qualityexcellence.es > > > > > > El 4 de enero de 2012 10:07, <Guillermo.Vinue en uv.es> escribió: > > > > > > > Hola, > > > > > > > > Tengo un vector llamado “neig” y querría sustituir sus valores dados > > por > > > > el vector “etiqs_nuevas”, por los valores de “etiqs_orig” queocupen la> > > > misma posición. > > > > > > > > Por ejemplo, si neig[1] es un 8, lo reemplazaría por el valor 17porque> > > > el valor 17 ocupa la misma posición en “etiqs_orig” que el valor8 en> > > > “etiqs_nuevas”. > > > > > > > > >neig > > > > [1] 8 8 8 2 5 5 8 8 8 8 8 2 8 12 5 12 12 5 11 137 7 14> > > > 14 13 > > > > 12 12 14 14 14 8 6 12 8 5 8 5 5 13 8 12 5 8 5 5 3 6 > > > > > > > > > > > > >etiqs_nuevas > > > > > > > > [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 > > > > > > > > > > > > >etiqs_orig > > > > > > > > [1] 1 6 8 12 14 15 16 17 18 20 21 22 23 24 > > > > > > > > > > > > He hecho el siguiente bucle for, pero me encuentro ante un problema . > > > > > > > > for(i in 1:length(etiqs_orig)){ > > > > > > > > neig[neig == etiqs_nuevas[i]] <- etiqs_orig[i] > > > > > > > > } > > > > > > > > Se trata de que por ejemplo, para i=2, el valor 2 se metransforma en> > un > > > > 6 que es lo que quiero, pero cuando i=6, ese valor 6 surgido de > > > > sustituir a 2 se me transforma en un 15. > > > > Por tanto, el valor 2 finalmente aparece sustituido por el valor 15, > > > > cuando yo querría que fuera el valor 6. > > > > > > > > ¿Cómo podría escribir que un valor ya sustituido no se vuelva a > > > > sustituir?, ¿alguien conoce una forma rápida de hacerlo?, si no,creo> > > > que me veo obligado a escribir muchas líneas de código. > > > > > > > > También he probado con la función replace pero no me da el resultado > > que > > > > necesito. > > > > > > > > replace(neig,etiqs_nuevas,etiqs_orig) > > > > > > > > > > > > Muchas gracias de antemano y feliz año a tod en s. > > > > > > > > Un saludo, > > > > > > > > Guillermo > > > > > > > > _______________________________________________ > > > > R-help-es mailing list > > > > R-help-es en r-project.org > > > > https://stat.ethz.ch/mailman/listinfo/r-help-es > > > > > > > > > > > > > >