R言語で複数のデータフレームを横方向に単純結合する方法について解説します。このような方法はいくつかあり、R言語に標準で搭載されている機能を使用した方法もありますが、ここではtidyverseパッケージに含まれているdplyrパッケージのbind_cols()を使用した方法についてお伝えします。
		bind_cols()の概要
bind_cols()は、複数のデータフレームを列ごとに結合するための関数です。bind_cols()は、任意の数のデータフレームを列ごとに結合して、より広い結果を作成します。これはdo.call(cbind, dfs)と似ています。
bind_cols()の使い方
dplyr::bind_cols()の使い方は次になります。
bind_cols(
  ...,
  .name_repair = c("unique", "universal", "check_unique", "minimal")
)
bind_cols()の引数の意味
…
結合するデータフレームを指定します。
各引数は、データフレームまたはデータフレームのリストです。入力は同じ長さにリサイクルされ、位置によって一致します。
.name_repair = c(“unique”, “universal”, “check_unique”, “minimal”)
「unique」、「universal」、「check_unique」のいずれかを指定します。
- unique: 重複した列名は、一意になるように接尾辞(サフィックス)が追加されます
 - universal: 構文の規則に従う一意的な列名を割り当てることで、エラーを発生させません
 - check_unique: 列名の修復は実行さず、代わりに列名が「unique」基準に適合しない場合はエラーが発生します
 
準備
あらかじめ、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 |>
  select(Sepal.Length, Sepal.Width)
df_iris1  |>
  head()
  Sepal.Length Sepal.Width
1          5.1         3.5
2          4.9         3.0
3          4.7         3.2
4          4.6         3.1
5          5.0         3.6
6          5.4         3.9
df_iris2 <- iris |>
  select(Petal.Length, Petal.Width, Species)
df_iris2  |>
  head()
  Petal.Length Petal.Width Species
1          1.4         0.2  setosa
2          1.4         0.2  setosa
3          1.3         0.2  setosa
4          1.5         0.2  setosa
5          1.4         0.2  setosa
6          1.7         0.4  setosa
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 |>
  select(mpg, cyl, disp, hp, drat, wt, qsec)
df_mtcars1 |>
  head()
                   mpg cyl disp  hp drat    wt  qsec
Mazda RX4         21.0   6  160 110 3.90 2.620 16.46
Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02
Datsun 710        22.8   4  108  93 3.85 2.320 18.61
Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44
Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02
Valiant           18.1   6  225 105 2.76 3.460 20.22
df_mtcars2 <- mtcars |>
  select(vs, am, gear, carb)
df_mtcars2 |>
  head()
                  vs am gear carb
Mazda RX4          0  1    4    4
Mazda RX4 Wag      0  1    4    4
Datsun 710         1  1    4    1
Hornet 4 Drive     1  0    3    1
Hornet Sportabout  0  0    3    2
Valiant            1  0    3    1
横方向への単純結合
bind_cols()を使用して、複数のデータフレームを横方向に単純結合するには、それぞれのデータフレームの行数が等しくなければいけません。df_iris1とdf_iris2に対して、bind_cols()を使用すると次のようになります。
df_iris1 |>
  bind_cols(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_df_mtcars2に対して、bind_cols()を使用すると次のようにエラーとなります。
df_iris1 |>
  bind_cols(df_mtcars1) |>
  head()
Error in `bind_cols()`:
! Can't recycle `..1` (size 150) to match `..2` (size 32).
Run `rlang::last_trace()` to see where the error occurred.