Estimados tengo 1 lista de valores aleatorios misma que necesito reordenar de acuerdo a determinadas condiciones. Ej: sea la siguiente lista (la primera fila hace referencia a la posición del valor de lista 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 7 3 4 8 6 1 4 5 2 3 4 10 15 5 necesito que me tome los valores que son mayores 3 y menores a 8, pero unicamente considerando los valores hasta la 8va posición, para luego los valores que cumpla esa condición colocarlos hasta antes de la 8va posición: Tendriamos lo siguiente: a) los valores para el análisis 1 2 3 4 5 6 7 8 1 7 3 4 8 6 1 4 b) los valores que cumplen la condición del intervalo 2 4 6 8 7 4 6 4 c) Reordenando los valores en la lista inicial se tendría 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 3 8 1 7 4 6 4 5 2 3 4 10 15 5 En definitiva sería de reordenar los valores colocandolos al final del grupo seleccionado. La lógica y el motivo de xq realizar estas operaciones es la siguiente: Me encuentro simulando viajes de pasajeros en donde los valores de la lista representan el destino y la posición representa el orden en que los pasajeros han llegado a la parada para tomar el autobus; las condiciones de>3 y <8 (pueden ser otras) representan que el bus al llegar a la parada norealiza desembarque en las paradas 4 5 6 7 por tal razon esos pasajeros esperarian al siguiente autobus que los llevaría a su destino, estos pasajeros que no abordaron pasarían a estar primeros en las filas para tomar el siguiente autobus. [[alternative HTML version deleted]]
Beatriz Martínez
2013-Jul-23 17:52 UTC
[R-es] Selección de valores de la lista y reordenar
Hola ¿qué tal? La verdad que yo acostumbro a trabajar con data.frames, así que a priori, probaría algo así: subsetlist <- list[1:8] subsetlist2 <- list[which(list > 3 & list < 8)] Espero que te sirva o que al menos te de alguna pista! El 23 de julio de 2013 19:39, Alejandro Ayala <alejo.ayalab@gmail.com>escribió:> Estimados tengo 1 lista de valores aleatorios misma que necesito reordenar > de acuerdo a determinadas condiciones. Ej: sea la siguiente lista (la > primera fila hace referencia a la posición del valor de lista > > 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 > 1 7 3 4 8 6 1 4 5 2 3 4 10 15 5 > > necesito que me tome los valores que son mayores 3 y menores a 8, pero > unicamente considerando los valores hasta la 8va posición, para luego los > valores que cumpla esa condición colocarlos hasta antes de la 8va posición: > > Tendriamos lo siguiente: > > a) los valores para el análisis > > 1 2 3 4 5 6 7 8 > 1 7 3 4 8 6 1 4 > > b) los valores que cumplen la condición del intervalo > > 2 4 6 8 > 7 4 6 4 > > c) Reordenando los valores en la lista inicial se tendría > > 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 > 1 3 8 1 7 4 6 4 5 2 3 4 10 15 5 > > En definitiva sería de reordenar los valores colocandolos al final del > grupo seleccionado. > > La lógica y el motivo de xq realizar estas operaciones es la siguiente: Me > encuentro simulando viajes de pasajeros en donde los valores de la lista > representan el destino y la posición representa el orden en que los > pasajeros han llegado a la parada para tomar el autobus; las condiciones de > >3 y <8 (pueden ser otras) representan que el bus al llegar a la parada no > realiza desembarque en las paradas 4 5 6 7 por tal razon esos pasajeros > esperarian al siguiente autobus que los llevaría a su destino, estos > pasajeros que no abordaron pasarían a estar primeros en las filas para > tomar el siguiente autobus. > > [[alternative HTML version deleted]] > > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es > >-- Beatriz Martínez @_bmartinez_ <https://twitter.com/_bmartinez_> [[alternative HTML version deleted]]
Hola, Aunque es un poco tedioso, pero paso a paso se consigue. Esto, obviamente lo puedes transformar en una función... #----------------------------------------------------------------------------------- via.ja <- c(1, 7, 3, 4, 8, 6, 1, 4, 5, 2, 3, 4, 10, 15, 5) via.pri <- via.ja[1:8] via.las <- via.ja[9:length(via.ja)] via.ind <- which( (via.pri > 3 & via.pri < 8), arr.ind=T) via.ind.val <- via.pri[via.ind] via.no.ind.val <- via.pri[setdiff(1:8,via.ind)] via.new <- c(via.no.ind.val, via.ind.val, via.las) #----------------------------------------------------------------------------------- Saludos, Carlos Ortega www.qualityexcellence.es El 23 de julio de 2013 19:39, Alejandro Ayala <alejo.ayalab@gmail.com>escribió:> Estimados tengo 1 lista de valores aleatorios misma que necesito reordenar > de acuerdo a determinadas condiciones. Ej: sea la siguiente lista (la > primera fila hace referencia a la posición del valor de lista > > 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 > 1 7 3 4 8 6 1 4 5 2 3 4 10 15 5 > > necesito que me tome los valores que son mayores 3 y menores a 8, pero > unicamente considerando los valores hasta la 8va posición, para luego los > valores que cumpla esa condición colocarlos hasta antes de la 8va posición: > > Tendriamos lo siguiente: > > a) los valores para el análisis > > 1 2 3 4 5 6 7 8 > 1 7 3 4 8 6 1 4 > > b) los valores que cumplen la condición del intervalo > > 2 4 6 8 > 7 4 6 4 > > c) Reordenando los valores en la lista inicial se tendría > > 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 > 1 3 8 1 7 4 6 4 5 2 3 4 10 15 5 > > En definitiva sería de reordenar los valores colocandolos al final del > grupo seleccionado. > > La lógica y el motivo de xq realizar estas operaciones es la siguiente: Me > encuentro simulando viajes de pasajeros en donde los valores de la lista > representan el destino y la posición representa el orden en que los > pasajeros han llegado a la parada para tomar el autobus; las condiciones de > >3 y <8 (pueden ser otras) representan que el bus al llegar a la parada no > realiza desembarque en las paradas 4 5 6 7 por tal razon esos pasajeros > esperarian al siguiente autobus que los llevaría a su destino, estos > pasajeros que no abordaron pasarían a estar primeros en las filas para > tomar el siguiente autobus. > > [[alternative HTML version deleted]] > > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es > >-- Saludos, Carlos Ortega www.qualityexcellence.es [[alternative HTML version deleted]]
Muchas gracias por su ayuda me dieron ciertas ideas de como hacerlo El 23 de julio de 2013 15:41, Carlos Ortega <cof@qualityexcellence.es>escribió:> Hola, > > Aunque es un poco tedioso, pero paso a paso se consigue. > Esto, obviamente lo puedes transformar en una función... > > > #----------------------------------------------------------------------------------- > via.ja <- c(1, 7, 3, 4, 8, 6, 1, 4, 5, 2, 3, 4, 10, 15, 5) > via.pri <- via.ja[1:8] > via.las <- via.ja[9:length(via.ja)] > > via.ind <- which( (via.pri > 3 & via.pri < 8), arr.ind=T) > via.ind.val <- via.pri[via.ind] > > via.no.ind.val <- via.pri[setdiff(1:8,via.ind)] > > via.new <- c(via.no.ind.val, via.ind.val, via.las) > > #----------------------------------------------------------------------------------- > > Saludos, > Carlos Ortega > www.qualityexcellence.es > > > El 23 de julio de 2013 19:39, Alejandro Ayala <alejo.ayalab@gmail.com>escribió: > >> Estimados tengo 1 lista de valores aleatorios misma que necesito reordenar >> >> de acuerdo a determinadas condiciones. Ej: sea la siguiente lista (la >> primera fila hace referencia a la posición del valor de lista >> >> 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 >> 1 7 3 4 8 6 1 4 5 2 3 4 10 15 5 >> >> necesito que me tome los valores que son mayores 3 y menores a 8, pero >> unicamente considerando los valores hasta la 8va posición, para luego los >> valores que cumpla esa condición colocarlos hasta antes de la 8va >> posición: >> >> Tendriamos lo siguiente: >> >> a) los valores para el análisis >> >> 1 2 3 4 5 6 7 8 >> 1 7 3 4 8 6 1 4 >> >> b) los valores que cumplen la condición del intervalo >> >> 2 4 6 8 >> 7 4 6 4 >> >> c) Reordenando los valores en la lista inicial se tendría >> >> 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 >> 1 3 8 1 7 4 6 4 5 2 3 4 10 15 5 >> >> En definitiva sería de reordenar los valores colocandolos al final del >> grupo seleccionado. >> >> La lógica y el motivo de xq realizar estas operaciones es la siguiente: Me >> encuentro simulando viajes de pasajeros en donde los valores de la lista >> representan el destino y la posición representa el orden en que los >> pasajeros han llegado a la parada para tomar el autobus; las condiciones >> de >> >3 y <8 (pueden ser otras) representan que el bus al llegar a la parada no >> realiza desembarque en las paradas 4 5 6 7 por tal razon esos pasajeros >> esperarian al siguiente autobus que los llevaría a su destino, estos >> pasajeros que no abordaron pasarían a estar primeros en las filas para >> tomar el siguiente autobus. >> >> [[alternative HTML version deleted]] >> >> >> _______________________________________________ >> R-help-es mailing list >> R-help-es@r-project.org >> https://stat.ethz.ch/mailman/listinfo/r-help-es >> >> > > > -- > Saludos, > Carlos Ortega > www.qualityexcellence.es >[[alternative HTML version deleted]]