[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