Rでデータの結合① ー行の結合, rbind関数, bind_rows関数ー

Rでプレゼンテーション

データの結合は、データ解析において非常に重要な操作の一つです。
複数のデータソースから情報を統合することで、より包括的な分析が可能になります。
この記事では、Rを使用してデータの結合(行の結合)を行う方法について紹介します。

データの結合は、データ解析において欠かせないステップです。今回は、行の結合(縦の結合)を解説します。

 

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

データ同士の属性が全てそろっていなくても、結合可能なので便利ですよね。
今回は、データの行の結合(縦の結合)を解説しました。

また、別の記事でデータの列の結合(横の結合)を解説したいと思います。
どうぞよろしくお願いします。




コメント

タイトルとURLをコピーしました