[R-es] intercalar elementos de vectores
Carlos Ortega
cof en qualityexcellence.es
Mar Feb 24 15:01:55 CET 2015
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
El 24 de febrero de 2015, 14:10, Fernando Macedo <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>:
>
> > 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
> > 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
> https://stat.ethz.ch/mailman/listinfo/r-help-es
>
--
Saludos,
Carlos Ortega
www.qualityexcellence.es
[[alternative HTML version deleted]]
Más información sobre la lista de distribución R-help-es