R・データ分析

【R】data.frameを列名(カラム名)で並べ替えする方法

dplyrパッケージは便利ですよね。私もこのパッケージがあるからRを使っているといっても過言ではありません。

さて、今回はそんな便利なdplyrパッケージですが、データフレームを列名でソートする方法を紹介します。

データ自体をソート、並べ替えをするのはarrange関数があるから簡単ですが、列の並び替えをする方法って意外と盲点ではないですか?

今回はそんなお悩みに答えます。

この記事でわかること。

  • dplyrパッケージを使って列名の昇順、降順でカラムを並び替えることができる。

では、始めて行きましょう。

結論(実際のコードの紹介)

今回は非常に簡単なので手短に、コードの紹介をしてちょっとだけ解説をしていきます。

Rにデフォルトで格納されているmpgのデータを使った例になります。

 

 

列名で昇順ソートがされました。

降順に並べ替えたい場合は↓のようにsort関数にdecreasing = Tを指定すると、Name_listが降順に並び変わり残りの手順は昇順と一緒です。

 

コードの解説

下のコードでは、mpgのカラム名のベクトルを取得してソートし、Name_listに格納します。

データの中身はこんな感じです。

 

続いて、下のコードで上でソートした名前のリストの順番に従ってカラムをセレクトします。

 

select(all_of(××))と記載すると(××はベクトル形式のデータです)××の名前と一致するカラムをselectする動作が行われます。

ただ、注意しなければならないのは、all_of(××)と記載すると××の中にあるものすべてがデータフレームの中に存在しないとエラーになります。

mpgに存在しないカラム名を指定したName_list2をall_ofに指定するとエラーになります。

こんな時はone_ofもしくはany_ofを使いましょう。並べ替えとは関係ないですが・・。

one_of、any_ofは指定した文字列のうち一致する列を選択してくれます。実際の出力を確認するとわかりますが、one_ofの場合、「hoge.hageというカラムはありませんよ」という警告を表示してくれます。

 

 

というわけで、個人的にはall_ofとone_ofを使うことは多いけど、any_ofはほとんど使いませんね。

そもそも、選択したい列の名前ベクトルをきちんと使ってからselect関数に投げたいのでほぼall_ofしか使わないです。

まとめ

data.frameを列名(カラム名)でソートしたい場合は

メモ

  • 並べ替えたいdata.frameのカラム名のベクトルを取得
  • カラム名のベクトルを並び替える
  • 並び替えたベクトルを使ってselect関数でカラムを選択する

といった3つの手順で実現することができました。

また補足として、all_of、one_of、any_ofの使い方は、以下の通りです。

メモ

  • all_of:名前のベクトルはデータフレームにすべて存在する必要がある
  • one_of/any_of:名前ベクトルに一致した列だけ取得する。存在しない列名がある場合はone_ofは警告を表示する。

それでは。

-R・データ分析

© 2021 trunk28 Powered by AFFINGER5