R logo

下記のようなデータフレーム(df)があり、行を昇順or降順で並べ替えたい時。

私が使いやすいと思う順で

arrange()

,

order

,

sort()

の使い方を書き留めておく。

dplyr::arrange() 関数

arrange()

はdplyrのパッケージの中に入っている。

install.packages("dplyr")
library(dplyr)

昇順で並べ替え

方法は、

arrange(データ名, 参照する列

df2 <- arrange(df, CSF_tTau)

行が"CSF_tTau"の列の値の昇順で並べ替えられた。

降順で並べ替え

降順での並び替えは、

desc()

を追加する。

df2 <- arrange(df, desc(CSF_tTau))

今度は、CSF_tTauの値を参照にして行が降順並び替えられた。

文字列で並び替え

例えば下記のデータ。

r-arrange-character_0000_Layer 1

"group" の列の文字列 "a", "b", "c"でソートしたい場合は、そのベクターをfactorに変換して、levelsを指定すればOK。

factor(df7$group, labels = c("a", "b", "c"))

df8 <- arrange(df7, df7$group)
r-arrange-character_0000_Layer 2

降順は

desc()

をつける。

df9 <- arrange(df7, desc(group))
r-arrange-character_0000_Layer 3

複数列の条件で並び替え

by_group = TRUE

にすると、指定した列のグループごとで列を並び替える。

下記データを、

sort-group_by_0002_Layer 3

"group" の記号 "a", "b", "c" 毎に、CSF_tTauの値を昇順でソートしたい場合。

df2 <- arrange(df, desc = FALSE, .by_group = TRUE

下記の様にグループ a, b, c で分かれてCSF_tTauの値で昇順でソートされた。

r-arrange-layer4

order() 関数

R標準パッケージの

order()を使う方法。

order関数は、引数の項目でソートしたときに元データの項目番号がどういう順番で並ぶかを返してくれる。

rank関数がデータを昇順で並べた時のソート後の順番を返すのと違う点に注意。

昇順で並び替え

order関数をデータフレームの任意の列に適応すると、結果がベクターで返ってくる。

> df2$CSF_tTau
[1] 121 87 208

> order(df2$CSF_tTau)
[1] 2 1 3

この結果を元のデータフレームの行部分に充てると、その順番で並べ替えられたデータが返ってくる。

降順で並び替え

データを降順でソートしたい時は、

decreasing = TRUE

で指示する。

df4 <- df2[order(df2$CSF_tTau, decreasing=T),]

文字列で並び替え

文字列をfactorにしてlevelsを指定すれば、その順番でも並び替え可能。

例えば下記データがあって、

row-order-2_0002_Layer 3

"a", "b", "c" の順で行を並び替えたい場合。

factor(df7$group, labels = c("a", "b", "c"))
df8 <- df7[order(df7$group), ]
row-order-2_0002_Layer 4

複数列の条件で並び替え

条件列は複数でもOK。

df9 <- df7[order(df7$group, df7$CSF_tTau), ]
row-order-2_0002_Layer 5

sort() 関数

R標準パッケージの

sort()

関数でもデータフレームの行を並び替える事ができる。

例えば、下記のようなデータがあったとする。

sort_0002_Layer 1

昇順で並び替え

sort()

関数は、ベクトルの要素を昇順で並び替える。

> sort(df7$CSF_tTau)
[1] "108" "121" "300" "8" "87"

けれども、ベクトルの要素を返すため、sort関数の結果のみでデータセット全体を並び替える事はできず、結果とその行番号を返す引数 "index" を指定し、並び替え後の行番号を格納する "$ix" を使う。

df10 <- df7[sort(df7$CSF_tTau, index=T)$ix,]
sort_0002_Layer 2

降順で並び替え

降順にしたい場合は、

decreasing = TRUE

を指定する。

df11 <- df7[sort(df7$CSF_tTau, decreasing=T, index=T)$ix,]
sort_0002_Layer 3

References

にほんブログ村 子育てブログ ワーキングマザー育児へ