R言語で、リストをフラット化する方法について解説します。リストの操作は様々な方法がありますが、ここではtidyverseパッケージに含まれているpurrrパッケージのlist_flatten()を使用した方法についてお伝えします。
list_flatten()の概要
list_flatten()は、リストをフラット化するための関数です。リストをフラット化すると、内部階層の1つのレイヤーが削除されます。つまり、リストである要素はインライン化され、リスト以外の要素はそのまま残ります。
list_flatten()の使い方
purrr::list_flatten()の使い方は次になります。
list_flatten(
x,
...,
name_spec = "{outer}_{inner}",
name_repair = c("minimal", "unique", "check_unique", "universal")
)
list_flatten()の引数の意味
x
リストを指定します。
…
これらのドットは将来の拡張用であり、空である必要があります。
name_spec = “{outer}_{inner}”
内部名と外部名の両方が存在する場合は、それらを組み合わせる方法を制御します。変数innerとouterを使用する接着仕様にする必要があります。
name_repair = c(“minimal”, “unique”, “check_unique”, “universal”)
「minimal」、「unique」、「universal」、「check_unique」のいずれかを指定します。
- minimal: 最小限の名前が存在することを指定します。名前ばない場合は””でありNAにはなりません
- unique: 重複した列名は、一意になるように接尾辞(サフィックス)が追加されます
- universal: 構文の規則に従う一意的な列名を割り当てることで、エラーを発生させません
- check_unique: 列名の修復は実行さず、代わりに列名が「unique」基準に適合しない場合はエラーが発生します
準備
あらかじめ、tidyverseパッケージを読み込んでおきます。
library(tidyverse)
リストをフラット化する
リストをフラット化するには次のようにします。
x <- list(
x1 = 1:3,
y1 = letters[1:5],
z1 = list(
x1 = 10:13,
y1 = LETTERS[10:15]
)
)
list_flatten(x)
$x1
[1] 1 2 3
$y1
[1] "a" "b" "c" "d" "e"
$z1_x1
[1] 10 11 12 13
$z1_y1
[1] "J" "K" "L" "M" "N" "O"
R×purrr::list_flatten リストをフラット化する