2016-08-08 15 views
2

Ich möchte einen Vektor (x) in mehrere Vektoren (x1, x2, ..., xn) aufteilen.Teilen eines Vektors in mehrere Vektoren in R

Mein Eingang: x < - 01.10

Mein Wunsch Ausgabe:

x1 <- c(1,2,3,4) 
x2 <- c(2,3,4,5) 
x3 <- c(3,4,5,6) 
x4 <- c(4,5,6,7) 
x5 <- c(5,6,7,8) 
x6 <- c(6,7,8,9) 
x7 <- c(7,8,9,10) 

Mein Code (dank Mrs.Richard Herron für Inspiration):

x <- 1:10 
n <-3 
vectors <- function(x, n) split(x, sort(rank(x) %% n)) 
vectors(x,n) 

Dank sehr viel!

+1

Sie data.table die verwenden könnte 'shift' funktioniert wie in 'lapply (shift (test, 0: 6), tail, 4)' –

Antwort

2

Wir können lapply zur Schleife über die Folge von ‚x‘ derart verwenden, dass wir ein length von 4 in jedem der Elemente in list haben eine Sequenz erzeugen (:) aus diesem Index zu Index + N, die Teilmenge des " x '. Wenn Sie individuelle vector s benötigen, legen Sie die Namen list fest und verwenden Sie list2env.

n <- 3 
lst <- lapply(1:(length(x)-n), function(i) x[i:(i+n)]) 
names(lst) <- paste0("x", seq_along(lst)) 
list2env(lst, envir = .GlobalEnv) 
x1 
#[1] 1 2 3 4 
x2 
#[1] 2 3 4 5 
x3 
#[1] 3 4 5 6 

Oder wir können auch ein matrix anstelle von mehreren vector s im globalen Umfeld schaffen, in dem jede Zeile mit dem Vektor von Interesse entspricht

matrix(x[1:4] + rep(0:6, each = 4), ncol=4, byrow = TRUE) 
+1

Ja! Gut gemacht ! Vielen Dank ! – user1032066

+1

@ user1032066 Danke für die Rückmeldung. Wenn es funktioniert, denken Sie bitte daran, die Lösung zu akzeptieren, indem Sie auf das Häkchen neben der Abstimmung klicken – akrun

Verwandte Themen