R言語で複数のデータフレームを縦方向に単純結合する方法について解説します。このような方法はいくつかあり、R言語に標準で搭載されている機能を使用した方法もありますが、ここではtidyverseパッケージに含まれているdplyrパッケージのbind_rows()を使用した方法についてお伝えします。
目次
bind_rows()の概要
bind_rows()は、複数のデータフレームを行ごとに結合するための関数です。bind_rows()は、任意の数のデータフレームを行ごとに結合して、データフレームを縦に長くします。
bind_rows()の使い方
dplyr::bind_rows()の使い方は次になります。
bind_rows(..., .id = NULL)
bind_rows()の引数の意味
…
結合するデータフレームを指定します。
各引数は、データフレームまたはデータフレームのリストです。列は名前で一致し、欠落している列はNAで埋められます。
.id = NULL
オプションの識別子列の名前をで各入力を識別する出力列を作成するための文字列を指定します。
列には、使用可能な場合は名前が使用され、それ以外の場合は位置が使用されます。
準備
あらかじめ、tidyverseパッケージを読み込んでおきます。
library(tidyverse)
解説のために、次のirisデータセットとmtcarsデータセットのそれぞれの分割データセットを使用します。
iris |>
head()
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
df_iris1 <- iris |>
slice(1:75)
df_iris1 |>
head()
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
df_iris2 <- iris |>
slice(76:150)
df_iris2 |>
head()
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 6.6 3.0 4.4 1.4 versicolor
2 6.8 2.8 4.8 1.4 versicolor
3 6.7 3.0 5.0 1.7 versicolor
4 6.0 2.9 4.5 1.5 versicolor
5 5.7 2.6 3.5 1.0 versicolor
6 5.5 2.4 3.8 1.1 versicolor
mtcars |>
head()
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
df_mtcars1 <- mtcars |>
slice(1:16)
df_mtcars1 |>
head()
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
df_mtcars2 <- mtcars |>
slice(17:32)
df_mtcars2 |>
head()
mpg cyl disp hp drat wt qsec vs am gear carb
Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4
Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1
Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2
Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1
Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1
Dodge Challenger 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2
同じ列名を持つ複数のデータフレームの縦方向への単純結合
df_iris1とdf_iris2に対して、bind_rows()を使用すると次のようになります。
df_iris1 |>
bind_rows(df_iris2) |>
head()
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
異なる列名を持つ複数のデータフレームの縦方向への単純結合
df_iris1とdf_mtcars1に対して、bind_rows()を使用すると次のようになります。
df_iris1 |>
bind_rows(df_mtcars1) |>
slice(72:78)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species mpg cyl disp hp drat wt qsec vs am gear carb
...1 6.1 2.8 4.0 1.3 versicolor NA NA NA NA NA NA NA NA NA NA NA
...2 6.3 2.5 4.9 1.5 versicolor NA NA NA NA NA NA NA NA NA NA NA
...3 6.1 2.8 4.7 1.2 versicolor NA NA NA NA NA NA NA NA NA NA NA
...4 6.4 2.9 4.3 1.3 versicolor NA NA NA NA NA NA NA NA NA NA NA
Mazda RX4 NA NA NA NA <NA> 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag NA NA NA NA <NA> 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 NA NA NA NA <NA> 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
R入門 複数のデータフレームを縦方向に単純結合する方法