[R-es] intercalar elementos de vectores
Fernando Macedo
fermace en gmail.com
Vie Ago 21 14:36:50 CEST 2015
De vuelta a agradecer a ambos, porque justo ahora estaba de nuevo con un
problema parecido y he vuelto a consultar el correo.
Muchas gracias por su ayuda!
Saludos
DMTV Fernando Macedo
Asistente del área Mejoramiento Genético
Facultad de Veterinaria - UdelarR - Uruguay
Tel: 26284291
Cel.: 098596947
fermace en gmail.com
El 24/02/15 a las 19:28, Carlos Ortega escibió:
> Hola,
>
> He querido comprobar los tiempos proceso que se obtendrían utilizando
> una u otra opción (mapply vs. sapply) para un conjunto equivalente en
> tamaño al que Fernando planteaba (data.frame de 316 columnas y 562000
> filas).
>
> Y estos son los resultados:
>
> * En mi máquina MacAir (4GB RAM - 1.3GHz Intel Core i5) :
> o con mapply obtengo tiempos de 1.4 minutos.
> o con sapply se me bloqueaba RStudio.
>
> En ambos casos, iniciaba sesión "limpia" de RStudio.
>
> Para no tener problemas de máquina he probado ambos casos en la
> plataforma "Microsoft Azure Machine Learning" y los resultados son los
> siguientes:
>
> * mapply: 34.862 segundos
> * sapply: 35.057 segundos
>
> Sobre la plataforma de Microsoft, he vuelto a ver un comportamiento
> raro con la opción de sapply, hasta que he cambiado en la función
> "as.character()" por "as.vector()" y es cuando ha funcionado sin
> problemas con los tiempos indicados.
>
> Adjunto capturas de pantalla del código ejecutado en cada caso y los
> tiempos de ejecución que proporciona la plataforma.
> En ambos casos, los tiempos incluyen la generación del data.frame
> equivalente (562000 x 316).
>
>
>
> *OPCIÓN A (MAPPLY)*
>
> Imágenes integradas 2
> Imágenes integradas 6
>
>
>
>
> *OPCIÓN B (SAPPLY)*
>
>
> Imágenes integradas 1
>
> Imágenes integradas 5
>
> El 24 de febrero de 2015, 17:12, Fernando Macedo <fermace en gmail.com
> <mailto:fermace en gmail.com>> escribió:
>
> Muchas gracias a los dos, los ejemplos de uso de las funciones
> *apply siempre son bienvenidos.
>
> Saludos
>
> Fernando Macedo
>
> El 24/02/15 a las 12:12, Jorge I Velez escribió:
>> Gracias, Carlos.
>>
>> Habia pensado en algo similar usando sapply():
>>
>> sapply(seq(1, ncol(vtmp), by = 2), function(i)
>> c(rbind(as.character(vtmp[, i]), as.character(vtmp[, i+1]))))
>>
>> Dependiendo de la dimension de los datos, quizas mapply() sea
>> mas eficiente que sapply().
>>
>> Saludos cordiales,
>> Jorge.-
>>
>>
>> 2015-02-25 1:01 GMT+11:00 Carlos Ortega <cof en qualityexcellence.es
>> <mailto:cof en qualityexcellence.es>>:
>>
>> Hola,
>>
>> Este otro ejemplo a partir de la idea de Jorge, de cómo
>> procesar toda la tabla que tienes:
>>
>> > #Creo un data.frame de ejemplo todo con letras
>> > vtmp <- as.data.frame(lapply(letters,function(x) {
>> rep(x,each=50) }))
>> > names(vtmp) <- paste("col",LETTERS,sep="")
>> > head(vtmp)
>> colA colB colC colD colE colF colG colH colI colJ colK colL
>> colM colN colO colP colQ colR colS colT colU colV colW colX
>> colY colZ
>> 1 a b c d e f g h i j k l
>> m n o p q r s t u v w x y z
>> 2 a b c d e f g h i j k l
>> m n o p q r s t u v w x y z
>> 3 a b c d e f g h i j k l
>> m n o p q r s t u v w x y z
>> 4 a b c d e f g h i j k l
>> m n o p q r s t u v w x y z
>> 5 a b c d e f g h i j k l
>> m n o p q r s t u v w x y z
>> 6 a b c d e f g h i j k l
>> m n o p q r s t u v w x y z
>> >
>> > #Los números de columnas impares de mi data.frame
>> > matIndex <- seq(1, dim(vtmp)[2], by=2)
>> >
>> > #Función para juntar dos columnas (idea de Jorge)
>> > mifun <- function(x,y)
>> c(rbind(as.vector(vtmp[,x]),as.vector(vtmp[,y])))
>> >
>> > #Resulado aplicando mapply. Coge dos columnas consecutivas
>> y las alterna
>> > #y así de forma iterativa para cada una de las columnas que
>> indica "matIndex" y la siguiente columna "matIndex+1"
>> > resultado <- mapply(mifun,matIndex, matIndex+1)
>> > head(kk)
>> [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11]
>> [,12] [,13]
>> [1,] "a" "c" "e" "g" "i" "k" "m" "o" "q" "s" "u"
>> "w" "y"
>> [2,] "b" "d" "f" "h" "j" "l" "n" "p" "r" "t" "v"
>> "x" "z"
>> [3,] "a" "c" "e" "g" "i" "k" "m" "o" "q" "s" "u"
>> "w" "y"
>> [4,] "b" "d" "f" "h" "j" "l" "n" "p" "r" "t" "v"
>> "x" "z"
>> [5,] "a" "c" "e" "g" "i" "k" "m" "o" "q" "s" "u"
>> "w" "y"
>> [6,] "b" "d" "f" "h" "j" "l" "n" "p" "r" "t" "v"
>> "x" "z"
>> >
>>
>> Saludos,
>> Carlos Ortega
>> www.qualityexcellence.es <http://www.qualityexcellence.es>
>>
>> El 24 de febrero de 2015, 14:10, Fernando Macedo
>> <fermace en gmail.com <mailto:fermace en gmail.com>> escribió:
>>
>> Excelente! Ahora corre muy rápido. No conocía ese
>> método, creo que me va a
>> resultar muy útil.
>>
>> Muchas gracias y saludos.
>>
>> Fernando Macedo
>>
>> El 24/02/15 a las 10:51, Jorge I Velez escribió:
>>
>> Fernando,
>>
>> Podrias intentar
>>
>> R> a <- rep('a', 5)
>> R> b <- rep('b', 5)
>> R> a
>> [1] "a" "a" "a" "a" "a"
>> R> b
>> [1] "b" "b" "b" "b" "b"
>> R> c(rbind(a, b))
>> [1] "a" "b" "a" "b" "a" "b" "a" "b" "a" "b"
>>
>> Saludos,
>> Jorge.-
>>
>>
>> 2015-02-24 23:49 GMT+11:00 Fernando Macedo
>> <fermace en gmail.com <mailto:fermace en gmail.com>>:
>>
>> > Buenas a todos.
>> > Relato el problema:
>> >
>> > - tengo un archivo de 316 columnas por 562000 filas
>> (aprox.).
>> > - esas 316 columnas representan 158 sujetos, o sea dos
>> columnas por cada
>> > individuo conteniendo información que debe ser
>> condensada en una sola.
>> >
>> > Lo que necesito es ir tomando las dos columnas de cada
>> individuo e
>> > intercalar los elementos de los vectores formando uno solo.
>> >
>> > Ejemplificando sería algo así:
>> >
>> > > a
>> > [1] "a" "a" "a" "a" "a"
>> > > b
>> > [1] "b" "b" "b" "b" "b"
>> > > c
>> > [1] "a" "b" "a" "b" "a" "b" "a" "b" "a" "b"
>> >
>> >
>> > Estoy haciendo con un loop for pero es realmente muy
>> lento. He buscado por
>> > algún paquete que ya lo haga directamente pero no he
>> tenido mucho éxito. Me
>> > imagino que con sapply o apply pueda ser mucho más
>> efectivo pero me ha
>> > resultado complicado para entender la sintaxis de estas
>> funciones cuando
>> > involucra más de un objeto (vector, matriz, etc...).
>> >
>> > Desde ya agradezco las sugerencias que puedan verter
>> sobre este problema.
>> >
>> > --
>> > Fernando Macedo
>> >
>> > [[alternative HTML version deleted]]
>> >
>> > _______________________________________________
>> > R-help-es mailing list
>> > R-help-es en r-project.org <mailto: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 <mailto:R-help-es en r-project.org>
>> https://stat.ethz.ch/mailman/listinfo/r-help-es
>>
>>
>>
>>
>> --
>> Saludos,
>> Carlos Ortega
>> www.qualityexcellence.es <http://www.qualityexcellence.es>
>>
>>
>>
>
>
>
>
> --
> Saludos,
> Carlos Ortega
> www.qualityexcellence.es <http://www.qualityexcellence.es>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <https://stat.ethz.ch/pipermail/r-help-es/attachments/20150821/32dd8774/attachment-0001.html>
------------ próxima parte ------------
A non-text attachment was scrubbed...
Name: no disponible
Type: image/png
Size: 77789 bytes
Desc: no disponible
URL: <https://stat.ethz.ch/pipermail/r-help-es/attachments/20150821/32dd8774/attachment-0004.png>
------------ próxima parte ------------
A non-text attachment was scrubbed...
Name: no disponible
Type: image/png
Size: 49354 bytes
Desc: no disponible
URL: <https://stat.ethz.ch/pipermail/r-help-es/attachments/20150821/32dd8774/attachment-0005.png>
------------ próxima parte ------------
A non-text attachment was scrubbed...
Name: no disponible
Type: image/png
Size: 67496 bytes
Desc: no disponible
URL: <https://stat.ethz.ch/pipermail/r-help-es/attachments/20150821/32dd8774/attachment-0006.png>
------------ próxima parte ------------
A non-text attachment was scrubbed...
Name: no disponible
Type: image/png
Size: 55630 bytes
Desc: no disponible
URL: <https://stat.ethz.ch/pipermail/r-help-es/attachments/20150821/32dd8774/attachment-0007.png>
Más información sobre la lista de distribución R-help-es