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をコピーしました