データの結合は、データ解析において非常に重要な操作の一つです。
複数のデータソースから情報を統合することで、より包括的な分析が可能になります。
この記事では、Rを使用してデータの結合(行の結合)を行う方法について紹介します。
データの結合は、データ解析において欠かせないステップです。今回は、行の結合(縦の結合)を解説します。
■目次
1. 同じ列をもつデータ同士の行の結合 (rbind関数)
2. 同じ列名でも列数が全て揃っていないデータ同士の行の結合 (bind_rows関数)
3. 列名の並び順も列数も違うデータ同士を結合 (bind_rows関数)
1. 同じ列をもつデータ同士の行の結合 (rbind関数)
2. 同じ列名でも列数が全て揃っていないデータ同士の行の結合 (bind_rows関数)
3. 列名の並び順も列数も違うデータ同士を結合 (bind_rows関数)
1. 同じ列をもつデータ同士の行の結合 (rbind関数)
同じ列数・列名をもつ、異なるデータ同士を結合する例を紹介します。
下図のように、データの行を下に追加する形で結合させます。
この場合は、rbind()関数を使用します。以下に、irisデータを活用した例を示します。
set.seed(123) # 再現性を確保するための乱数シードの設定 iris1<-iris[sample(nrow(iris),5),] # 5行をランダムに抽出 iris2<-iris[sample(nrow(iris),5),] # 5行をランダムに抽出 iris1 # Sepal.Length Sepal.Width Petal.Length Petal.Width Species #14 4.3 3.0 1.1 0.1 setosa #50 5.0 3.3 1.4 0.2 setosa #118 7.7 3.8 6.7 2.2 virginica #43 4.4 3.2 1.3 0.2 setosa #150 5.9 3.0 5.1 1.8 virginica iris2 # Sepal.Length Sepal.Width Petal.Length Petal.Width Species #118 7.7 3.8 6.7 2.2 virginica #90 5.5 2.5 4.0 1.3 versicolor #91 5.5 2.6 4.4 1.2 versicolor #148 6.5 3.0 5.2 2.0 virginica #92 6.1 3.0 4.6 1.4 versicolor iris_c<-rbind(iris1, iris2) # 同じ列名をもつデータを下の行に結合 iris_c # Sepal.Length Sepal.Width Petal.Length Petal.Width Species #14 4.3 3.0 1.1 0.1 setosa #50 5.0 3.3 1.4 0.2 setosa #118 7.7 3.8 6.7 2.2 virginica #43 4.4 3.2 1.3 0.2 setosa #150 5.9 3.0 5.1 1.8 virginica #1181 7.7 3.8 6.7 2.2 virginica #90 5.5 2.5 4.0 1.3 versicolor #91 5.5 2.6 4.4 1.2 versicolor #148 6.5 3.0 5.2 2.0 virginica #92 6.1 3.0 4.6 1.4 versicolor
5行のiris1のデータと5行のiris2のデータを結合して、10行のiris_cができました。
では、列名が全部そろっていない場合はどうすればよいのか?
2. 同じ列名でも列数が全て揃っていないデータ同士の行の結合 (bind_rows関数)
下図のように、列名が全て揃っていない場合は、rbind関数は使えません。
dplyrパッケージのbind_rows関数を使用します!
列が抜けているところに欠損値NAを入れて、結合されます。
iris3<-iris2[,c(1:3,5)] #iris2の4列目(Petal.Width)を削除したもの iris3 # Sepal.Length Sepal.Width Petal.Length Species #118 7.7 3.8 6.7 virginica #90 5.5 2.5 4.0 versicolor #91 5.5 2.6 4.4 versicolor #148 6.5 3.0 5.2 virginica #92 6.1 3.0 4.6 versicolor library("dplyr") iris_c2<-bind_rows(iris1, iris3) iris_c2 # Sepal.Length Sepal.Width Petal.Length Petal.Width Species #1 4.3 3.0 1.1 0.1 setosa #2 5.0 3.3 1.4 0.2 setosa #3 7.7 3.8 6.7 2.2 virginica #4 4.4 3.2 1.3 0.2 setosa #5 5.9 3.0 5.1 1.8 virginica #6 7.7 3.8 6.7 NA virginica #7 5.5 2.5 4.0 NA versicolor #8 5.5 2.6 4.4 NA versicolor #9 6.5 3.0 5.2 NA virginica #10 6.1 3.0 4.6 NA versicolor
3. 同じ列名でも列名の並び順も列数も違うデータ同士の行の結合(bind_rows関数)
列名の順番がそろっていなくても、列名が同じなら揃えて結合してくれます。
iris4<-iris1[,c(2,1,4,3,5)] #1列目と2列目、3列目と4列目入れ替え iris4 # Sepal.Width Sepal.Length Petal.Width Petal.Length Species #14 3.0 4.3 0.1 1.1 setosa #50 3.3 5.0 0.2 1.4 setosa #118 3.8 7.7 2.2 6.7 virginica #43 3.2 4.4 0.2 1.3 setosa #150 3.0 5.9 1.8 5.1 virginica iris_c4<-bind_rows(iris3, iris4) #列名の並び順も、列数も揃っていないものの結合 iris_c4 # Sepal.Length Sepal.Width Petal.Length Species Petal.Width #1 7.7 3.8 6.7 virginica NA #2 5.5 2.5 4.0 versicolor NA #3 5.5 2.6 4.4 versicolor NA #4 6.5 3.0 5.2 virginica NA #5 6.1 3.0 4.6 versicolor NA #6 4.3 3.0 1.1 setosa 0.1 #7 5.0 3.3 1.4 setosa 0.2 #8 7.7 3.8 6.7 virginica 2.2 #9 4.4 3.2 1.3 setosa 0.2 #10 5.9 3.0 5.1 virginica 1.8
データ同士の属性が全てそろっていなくても、結合可能なので便利ですよね。
今回は、データの行の結合(縦の結合)を解説しました。
また、別の記事でデータの列の結合(横の結合)を解説したいと思います。
どうぞよろしくお願いします。
コメント