Necesito generar un vector de la siguiente formato mediante R:

1:10, 1:10, 11:20, 11:20, ... 121:130, 121:130

Hay una manera más fácil de crear 12 los vectores y, a continuación, repetir cada uno de los dos?

OriginalEl autor dnagirl | 2010-06-23

6 Comentarios

  1. 3

    Es esto lo que quieres?

    unlist(lapply(rep(seq(1, 121, by=10), each=2), function(x) seq(x, x+9)))

    OriginalEl autor Shane

  2. 18

    También se podría:

    rep(1:10, 26) + rep(seq(0,120,10), each=20)
    elegante! Y dado el número de maneras de obtener el resultado, me estoy sintiendo un poco mejor acerca de ser desconcertado.
    Incluso rep(1:10, 2) + rep(seq(0,120,10), cada uno=20) el trabajo
    las ratas, llegó esta tarde y pensaba que yo tenía la más rápida pero este está tan cerca de la solución óptima estoy solo voto. Para agilizar aún más el uso de «rep(0:12, cada uno = 20)*10» después de que el signo+. (6x speedup en general)
    además el tema de la velocidad – esta respuesta es 5 veces más rápido que lapply()). El exterior() respuesta aquí abajo queda entre esta respuesta y mi modificación en el rendimiento. La nueva matriz de respuesta es aproximadamente igual en velocidad a mi modificación aquí y tal vez el más rápido en general.
    Y uno más de la modificación: 1:10 + rep(10*(0:12), each=20).

    OriginalEl autor nico

  3. 3

    De otra manera:

    x <- matrix(1:130, 10, 13)
    c(rbind(x, x))

    Posible más eficiente de la versión:

    x <- 1:130
    dim(x) <- c(10,13)
    c(rbind(x, x))

    OriginalEl autor Marek

  4. 2

    Alternativamente, puedes usar una combinación de rep y outer, tales como:

    c(outer(1:10,rep(0:12,each=2),function(x,y)10*y+x))

    OriginalEl autor nullglob

  5. 1

    Creo que esto va a hacer usted.

    x <- ((0:12)*10)+1
    y <- x + 9
    
    repeatVectors <- function(x,y){
        rep(seq(x,y),2)
    }
    
    z <- mapply(repeatVectors, x,y)
    z <- as.vector(z)

    OriginalEl autor JoFrhwld

  6. 1

    Un método que utiliza split es

    unlist(rep(split(seq_len(130), rep(1:13, each=10)), each=2), use.names=FALSE)

    OriginalEl autor lmo

Dejar respuesta

Please enter your comment!
Please enter your name here