2016-05-29 8 views
7

ベクトルのn番目の要素を抽出する方法については多くの質問がありますが、n番目の要素の後に値を簡単に追加する方法の1つを見つけることができませんでした。ベクター。ベクトルのn番目の要素の後に特定の値を追加する簡単な方法はありますか?ベクトルのn番目の要素ごとに値を追加する

v1 <- paste0(letters[1:3], rep(1:5, each = 3)) 
> v1 
[1] "a1" "b1" "c1" "a2" "b2" "c2" "a3" "b3" "c3" "a4" "b4" "c4" "a5" "b5" "c5" 

v2 <- paste0("header", seq(1:5)) 
> v2 
[1] "header1" "header2" "header3" "header4" "header5" 

は今、私は最初から始まるv1のすべての三要素の後v2の要素を追加したい:

は例えば、我々は二つのベクトルを持って言うことができます。結果は次のようになります

[1] "header1" "a1" "b1" "c1" "header2" "a2" "b2" "c2" "header3" "a3" "b3" "c3" "header4" "a4" "b4" "c4" "header5" "a5" "b5" "c5" 

答えて

7

適切な次元の行列に長いベクトルを作成できます。ヘッダーを上に貼り付けます。 c()を使用して、行列を平坦化してベクトルに戻します。

例を構築:

v1 <- paste0(letters[1:3], rep(1:5, each = 3)) 
v2 <- paste0("header", seq(1:5)) 

マトリックスを作成し、ヘッダをアタッチ:

r <- rbind(v2,matrix(v1,ncol=length(v2))) 
## "header1" "header2" "header3" "header4" "header5" 
## "a1"  "a2"  "a3"  "a4"  "a5"  
## "b1"  "b2"  "b3"  "b4"  "b5"  
## "c1"  "c2"  "c3"  "c4"  "c5"  

は今それを平ら:

c(r) 
6

我々は(%/%で作成された)グループ化変数次いで(c)を連結し、listを形成するlistと「V2」の対応する要素を使用して「V1」をsplitできMapunlistです。

unlist(Map(`c`, v2, split(v1, (seq_along(v1)-1)%/%3+1)), use.names=FALSE) 
#[1] "header1" "a1"  "b1"  "c1"  "header2" "a2"  "b2"  
#[8] "c2"  "header3" "a3"  "b3"  "c3"  "header4" "a4"  
#[15] "b4"  "c4"  "header5" "a5"  "b5"  "c5" 

や「V1」の長さは「3」の倍数であるならば、我々は出力を転置し、cvectormatrixを変換し、V1「」、cbind V2「」でmatrixを作成することができます。

c(t(cbind(v2,matrix(v1, ncol=3, byrow=TRUE)))) 
関連する問題