データの結合は、データ解析において非常に重要な操作の一つです。
複数のデータソースから情報を統合することで、より包括的な分析が可能になります。
この記事では、Rを使用してデータの結合(行の結合)を行う方法について紹介します。
![](https://hira-labo.com/wp-content/uploads/2021/11/IMG_0086cut.jpg)
データの結合は、データ解析において欠かせないステップです。今回は、行の結合(縦の結合)を解説します。
■目次
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
データ同士の属性が全てそろっていなくても、結合可能なので便利ですよね。
今回は、データの行の結合(縦の結合)を解説しました。
また、別の記事でデータの列の結合(横の結合)を解説したいと思います。
どうぞよろしくお願いします。
コメント