R言語のデータフレームで複数の列を1つの文字列に統合する方法について解説します。このような方法はいくつかあり、R言語に標準で搭載されている機能を使用した方法もありますが、ここではtidyverseパッケージに含まれているtidyrパッケージのunite()を使用した方法についてお伝えします。unite()を使用する利点は、パイプ演算子と親和性が高くR言語に標準で搭載されている機能を使用する方法よりも可読性が高いコードが書けることが挙げられます。

unite()の概要

unite()は、複数の列を1つの文字列に統合するための関数です。

unite()の使い方

tidyr::unite()の使い方は次になります。


unite(data, col, ..., sep = "_", remove = TRUE, na.rm = FALSE)

unite()の引数の意味

data

データフレームを指定します。

col

新しい列名 (文字列またはシンボル)を指定します。
この引数は式によって渡され、準引用符をサポートします(文字列とシンボルを引用符で囲むことができます)。名前は、rlang::ensym()を使用して式から取得されます(シンボルが実際のオブジェクトを表さないこの種のインターフェイスは、現在tidyverseでは推奨されていません。ここでは下位互換性のためにサポートしています)。

tidy-selectを指定できます。統合する列を指定します。

sep = “_”

値の間に使用する区切り文字を指定します。

remove = TRUE

TRUEの場合、出力データフレームから入力列を削除します。

na.rm = FALSE

TRUEの場合、各値を結合する前に欠損値が削除されます。

準備

あらかじめ、tidyverseパッケージを読み込んでおきます。


library(tidyverse)

解説のために、次のToothGrowthデータセットを使用します。


ToothGrowth |>
  head()

   len supp dose
1  4.2   VC  0.5
2 11.5   VC  0.5
3  7.3   VC  0.5
4  5.8   VC  0.5
5  6.4   VC  0.5
6 10.0   VC  0.5

使用例

ToothGrowthデータセットで、列suppとdoseを統合し、列xとするには次のようにします。


ToothGrowth |>
  unite("x", supp, dose) |>
  head()

   len      x
1  4.2 VC_0.5
2 11.5 VC_0.5
3  7.3 VC_0.5
4  5.8 VC_0.5
5  6.4 VC_0.5
6 10.0 VC_0.5
R入門 データフレームで複数の列を1つの文字列に統合する方法