R言語

【R言語】リストの操作 作成・値の代入・要素の追加など

  1. HOME >
  2. R言語 >

【R言語】リストの操作 作成・値の代入・要素の追加など

スポンサーリンク

リストの結合

次に、リストの結合について見ていきます。

2つ以上のリストを結合したいときは、次のように関数cの引数に結合したいリストを渡します。

リストの並び替え・ソート

リストの並び替え及びソートの仕方について紹介します。

要素の取得と同様に、インデックスと名前でリストの要素を並び替える方法を解説します。

インデックスで指定

まずインデックスでリストの要素を並び替えを行っていきます。

並び替え後の要素に対応するようにインデックスのリストを大括弧に渡すことで、リストの要素を入れ替えることができます。

  • 1番目を末尾に移動したいときは、lst <- lst[c(setdiff(seq_len(length(lst)), 1), 1)]
  • 1から4番目を後ろに移動したいときは、lst <- lst[c(setdiff(seq_len(length(lst)), seq(1, 4)), seq(1, 4))]

また、リストをソートする場合は、次のように関数orderを使います。

関数orderによりリストの要素の順位を得ることができ、その順位(インデックス)を大括弧に入れることでリストをソートすることができます。

降順にしたいときは、関数orderの引数decreasingをTRUEにします。

リストを逆順にしたい場合は、次のように関数revを使います。

要素の並び替えの時と同じように、seq_lenによって得られるリストの長さの数列を関数revで逆順にすることで、リストの長さまでの逆順のインデックスが得られるので、リストを逆にすることができます。

また、関数revで直接リストを逆順に並び替えることもできます。

名前で指定

リストに名前がある場合、名前でリストの要素を並び替えることもできます。

インデックスのときと同様に、並び替え後の要素に対応するように名前のベクトルをリストの大括弧に渡すことで、並び替えをすることができます。

  • 名前"a"の要素を末尾に移動したいときは、lst <- lst[c(setdiff(names(lst), "a"), "a")] 
  • 名前"b"と"c"の要素を後ろに移動したいときは、lst <- lst[c(setdiff(names(lst), c("b", "c")), c("b", "c"))] 

欠測値の処理

次に、リストの欠測値の処理の方法について見ていきます。

ベクトルやデータフレームの時のように関数na.omitを使って欠測値NAを除去することができません。

次のようにリスト用の欠測値を除去する関数を定義する必要があります。

上の関数na.omit.listを用いることで、任意の要素を持つリスト中の欠測値を除去することができます。

リストのベクトル・データフレームへの変換

リストをベクトルとデータフレームに変換する方法を紹介します。

関数unlstを用いることでリストをベクトルに変換することができます。

リスト中に異なる型(Type)がある場合、変換後に型が変更される点に注意が必要です。

逆にベクトルからリストに変換するときは、関数as.listを使います。

データフレームに変換する際は、関数as.data.frameを使います。 変換したいリストを関数の引数に渡すことで、データフレームに変換することができます。

ベクトルの時と同様に、関数as.listでデータフレームからリストに変換できます。

リストの演算

リストの演算について見ていきます。

リストには算術演算を適用できないため、一度ベクトルに変換した後に演算を行う必要があります。

ベクトルと同様に、numeric型の要素を持つリストであれば次の演算が可能です。

和、差、積、商、べき乗、整数商、剰余、内積、テンソル積を計算することができます。

リストの演算と演算子
演算子演算
+
-
*
/
^べき乗
%/%整数商
%%剰余
%*%内積

和、差、積、商の実行例は以下の通りです。他の算術演算子についても同様に計算できます。

まず、unlistでベクトルに変換した後に演算を行い、as.listでベクトルに戻すと演算後のリストを得ることができます。

集合演算

リストの集合演算に関する関数を紹介します。

次の表の関数を用いることで、リストの和集合、差集合、積集合を計算することができます。

また、集合として等しいかどうか、集合の要素であるかどうかも計算することもできます。

集合演算に関する関数
関数演算
union和集合
setdiff差集合
intersect積集合
setequal同じ集合かどうか
is.element集合の要素であるかどうか

実行例は以下の通りです。

 合計・平均・分散

リストの合計、平均、分散を計算する例を紹介します。

リストについてもsummeanvarを適用することができないので、ベクトルに変換してから計算する必要があります。

合計、平均、分散の計算例は以下の通りです。

リストのファイルへの保存

最後にリストをtxtファイルやcsvファイルに保存する例を紹介します。

関数write.tablewrite.csvでtxtファイルやcsvファイルにリストの要素を出力することができます。

様々なリストの出力結果を以下にまとめました。

次のようにリストの要素が1つのみから構成される場合、txtファイルとcsvファイルへの出力結果は下図のようになります。

txtファイルへの出力1

csvファイルへの出力1

リストにベクトルが含まれている場合、txtファイルやcsvファイルに出力するとデータフレームの時と同じような出力になります。

txtファイルへの出力2

csvファイルへの出力2

まとめ

R言語のリストの操作方法について見ていきました。

データフレームやベクトルと同様に、インデックス名前真偽値による操作方法があります。

ベクトルの操作方法との違いとして、リストの後ろに付ける大括弧の数です。

リストの要素を取得するには2重の大括弧をつける必要があります。

1重の大括弧をつけても取得は可能ですが、戻り値はリストとなるため注意が必要です。

また、ベクトルと違い様々な型を1つのリストに格納することができるため、より柔軟なデータを作ることが可能です。

スポンサーリンク

  • この記事を書いた人
  • 最新記事

usagi-san

統計学とゲームとかをメインに解説していくよ。 数式とかプログラミングコードにミスがあったり質問があったりする場合はコメントで受け付けます。すぐに対応します。

-R言語
-,