2016-08-08 4 views
2

1つのベクトル(x)を複数のベクトル(x1、x2、...、xn)に分割します。ベクトルを複数のベクトルに分割するR

マイ入力:X < - 1時10

私の願望出力:

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) 

私のコード(インスピレーションのためのMrs.Richardヘロンのおかげで):

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

おかげで非常に多く!

+1

のベクトルに対応し、地球環境にmatrixの代わりに、複数のvector Sを作成することができます'lapply(shift(test、0:6)、tail、4)のように機能します。 –

答えて

2

我々は、我々はlistの各要素4のlengthを有するように「X」の配列をループにlapplyを使用率+ nにそのインデックスから配列(:)を作成し、 'のサブセットができバツ'。個別のvectorが必要な場合は、listの名前を設定し、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 

それとも我々はまた、各行はあなたがdata.tableの `shift`を使用することができます興味

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

うん!よくやった !どうもありがとう ! – user1032066

+1

@ user1032066フィードバックのためにありがとうございます。それが機能する場合は、投票の横にあるチェックマークをクリックして解決策を受け入れることを検討してください – akrun

関連する問題