2017-06-30 11 views
0

2つのデータセットがあり、どちらも同じ次元を持ち、2番目のデータセットの1番目の列が最初のデータセットの1番目の列の横に積み重ねられます。Rプログラミング - データを列方向に結合する

次の例を検討してください。これは予想される出力です。ここで、v1はデータセット1から来ており、v2はデータセット2から来ています。私はまた、列ヘッダーをそのまま保ちたいと思います。

        | v1 | v2 | 
           |:------:|:------:| 
           | -0.71 | -0.71 | 
           | -0.71 | -0.71 | 
           | -0.71 | -0.71 | 
           | -0.71 | -0.71 | 
           | -0.71 | -0.71 | 
           | -0.71 | -0.71 | 

Iはcbind()data.frame()を試みたが、両方とも完全な第一のデータセットではなく、カラム後のカラムの後に添加される第二のデータにつながりました。

​​

この、感謝を達成するために、正しい、より良い方法を提案してください。


UPDATE:可能duplicate flag to this question対応:

答えは私のためにうまくいかなかったこと。私が解決策を辿った後に得たデータは、私が望む結果をもたらさず、最終的な出力に似ていましたが、私はcbind()のアプローチで説明しました。

first answer givenは、元の列見出しを保持するのではなく、各列に新しい列名が割り当てられているという小さな問題があります。

また、受け入れられた回答にコメントを追加するには十分な評判がありません。おそらく

+2

可能な重複(https://stackoverflow.com/questions/24576548/merge-interleave-dataframes-in-r) –

答えて

1

を働く、あなたはこれを行うことができます。基本的には、最初にcbindとし、正しい順序でインデックスを作成します。そのインデックスを使用して、正しい列名のベクトルも作成します。その後、列の順序を索引付けし、列名を追加します。 [Rにマージ・インターリーブデータフレーム]の

df1 <- df2 <- data.frame(v1=1:10,v2=11:20, v3=21:30) 
final <- cbind(df1,df2) 

indexed <- rep(1:ncol(df1), each = 2) + (0:1) * ncol(df1) 
new_colnames <- colnames(final)[indexed] 
final_ordered <- final[indexed] 
colnames(final_ordered) <- new_colnames 

    v1 v1 v2 v2 v3 v3 
1 1 1 11 11 21 21 
2 2 2 12 12 22 22 
3 3 3 13 13 23 23 
4 4 4 14 14 24 24 
5 5 5 15 15 25 25 
6 6 6 16 16 26 26 
7 7 7 17 17 27 27 
8 8 8 18 18 28 28 
9 9 9 19 19 29 29 
10 10 10 20 20 30 30 
2

ないfor loopで最も効率的なソリューションが、列名の要件を修正するには

data1 <- cbind(1:10,11:20, 21:30) 
data2 <- cbind(1:10,11:20, 21:30) 

combined <- NULL 
for(i in 1:ncol(data1)){ 
    combined <- cbind(combined, data1[,i], data2[,i]) 
} 
+0

おかげ。それは動作します、私はちょうど列ヘッダーが変更されていないことを確認する方法を把握する必要があります。あなたのアプローチでは、列名はv1、v2 ... vnとして再割り当てされますが、データは私が望むように積み重ねられます。 –

+0

はい、私は元のデータとして列名を保持したいと思っていますが、私は上記の質問をしました。私はそれを把握した後にマークします。提案がある場合は、共有してください。 –

+0

@Aneconomistという質問は決して変更されませんでした。編集したバージョンは重複フラグの応答を追加することでした。歴史はそこにあり、先を見て見てください。また、私はあなたの答えをupvoteしようとしていた(PLapointeのものが正確で、あなたのものも正しいが、一つのことを逃している)が、それを行うのに十分な評判はない。履歴へのリンク:https://stackoverflow.com/posts/44850840/revisions –

関連する問題