【R】グループごとに連番をつける方法

R

今回はグループごとに連番をつける方法を紹介します。

グループごとに連番をつける

やりたいこと

今回は次のようにA、Bそれぞれに連番が付与されるようにするのが目的です。

サンプルデータとして、ggplotのdiamondsデータセットを使用します。
(変数が多いので7列目までを使ってやってみます。)

group_byとrow_numberを使って実践!

Rでグループごとに連番をつけるにはdplyrパッケージにあるgroup_byとrow_numberを使います。
group_byはグループ化するための関数、
row_numberは行番号を付与する関数、なのでなんとなくイメージしやすいかもしれません。

パッケージはtidyverseを読み込んでおくと、dplyrやggplotなどのパッケージも使えるので便利です。

サンプルのdiamondsデータセットのうち「cut」(ダイアモンドのカットの品質を示す)ごとに連番を付与してみます。

新たに「連番」という列を作成して、そこにcutごとの連番を格納して、diamonds_2というデータセットを作成します。
コードは以下のようになります。

まずは、group_byでグループ化します。
次に、新しい列を作成するmutateで「連番」という新しい列を作り、その中にrow_numberで番号を付与しています。
最後にungroupでグループ化を解除しておきましょう。

結果を確認してみると、「連番」という列が追加されて、連番が付与されていることが確認できます。
データ数が多いとグループごとにしっかり付与されているかが分かりにくいのでfilterを使ってグループごとに想定した結果になっているか確認しておきましょう。

念のため、他のグループ(cut==”Ideal”)でも連番が正しく付与されていることを確認してみましょう。

arrangeと組み合わせて連番のつけ方をコントロール

並べ替えを行うarrange関数と組み合わせると、さらに応用範囲が広がります。

先ほどの例では、カットの質(cut)ごとに番号をつけるだけでしたが、カットの質ごと価格(price)順に番号を付けることもできます。

group_byでグループ化した後に、arrangeを追加します。

先ほどと同様にcut==”Good”に絞って結果を確認してみましょう。

arrangeはデフォルトでは昇順で並ぶので、降順に並び替えたい場合はarrange(desc())とすればOKです。

他にも組み合わせ次第で活用の幅は広がるかもしれません。
ぜひ試してみてください!

コメント

タイトルとURLをコピーしました