R言語で、リストを転置する方法について解説します。リストの操作は様々な方法がありますが、ここではtidyverseパッケージに含まれているpurrrパッケージのlist_transpose()を使用した方法についてお伝えします。

list_transpose()の概要

list_transpose()は、リストを転置するための関数です。list_transpose()は、リストのリストを「裏返し」にします。たとえば、リストのペアをペアのリストに、またはペアのリストをリストのペアに変換します。たとえば、各コンポーネントに値aとbがある長さnのリストがある場合、list_transpose()は長さnのリストを含む要素aとbを持つリストを作成します。これが転置と呼ばれるのは、x[[“a”]][[“b”]]がlist_transpose(x)[[“b”]][[“a”]]と同等であるためです。つまり、リストを転置すると、行列を転置するのと同じようにインデックスの順序が反転します。

list_transpose()の使い方

purrr::list_transpose()の使い方は次になります。


list_transpose(
  x,
  ...,
  template = NULL,
  simplify = NA,
  ptype = NULL,
  default = NULL
)

list_transpose()の引数の意味

.x

転置するベクトルのリストを指定します。

これらのドットは将来の拡張用であり、空である必要があります。

template = NULL

出力リストを説明する「テンプレート」を指定します。文字ベクトル(要素は名前で抽出されます)または整数ベクトル(要素は位置で抽出されます)のいずれかになります。デフォルトでは、xの最初の要素の名前になりますが、存在しない場合は整数インデックスになります。

simplify = NA

結果を簡略化すべきかどうかを指定します。

  • TRUE: 簡略化する。
  • NA: 可能であれば簡略化する。
  • FALSE: 簡略化を試みず、常にリストとして残す。
ptype = NULL

簡略化を制御するために使用されるオプションのベクトルのプロトタイプを指定します。または、出力要素によってプロトタイプを指定する名前付きリストを指定します。

default = NULL

値が存在しないかNULLの場合に使用するデフォルト値を指定します。または、出力要素ごとにデフォルトを指定する名前付きリストを指定します。

準備

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


library(tidyverse)

リストを転置する

リストを転置するには次のようにします。


x <- list(
    x1 = 1:3,
    y1 = letters[1:5]
  )
list_transpose(x)

[[1]]
[[1]]$x1
[1] 1

[[1]]$y1
[1] "a"


[[2]]
[[2]]$x1
[1] 2

[[2]]$y1
[1] "b"


[[3]]
[[3]]$x1
[1] 3

[[3]]$y1
[1] "c"
R×purrr::list_transpose リストを転置する