R言語

【R言語】データフレーム操作 作成・値の代入・行と列の追加と削除など

  1. HOME >
  2. R言語 >

【R言語】データフレーム操作 作成・値の代入・行と列の追加と削除など

スポンサーリンク

Rでデータ解析を始めるならコレ
¥3,300 (2022/06/01 17:20時点 | Amazon調べ)

行名と列名の変更

データフレームの要素の変更に続いて、行名と列名の変更の方法を紹介します。

データフレームの行名と列名を変更するときは、関数rownamesまたはcolnamesを使います。

行名・列名を全て変更したい場合、次のように行数または列数分の長さのcharacter型のベクトルを代入すれば大丈夫です。

インデックスで指定

データフレームのある特定の行名や列名を変更したいことがあると思います。インデックスを与えることで、指定した行名または列名のみを変更することが可能です。

以下、実行例です。rownames(df)やcolnames(df)にnumeric型のベクトルを与えることで、指定した行名や列名のみを変更できているのが確認できます。

行名や列名で指定(真偽値で指定)

行名や列名を指定することでデータフレームの行名や列名を変更する方法<.span>を紹介します。

上で紹介したインデックスで変更する方法は簡単ですが、インデックスが間違っていたりデータセット行や列の順番が変わってしまうと色々と問題が起こります。

R言語のデフォルトの環境には名前で行名や列名を変更できる便利な関数は残念ながらありません(他のパッケージを使えばあります)。

少々汚くはなりますが、次のようにrownames(df)やcolnames(df)にlogical型のベクトルを与えることで名前と一致する行名や列名を変更することができます。

注意として、真偽値で指定し手変更しているので例えば、rownames(df)[rownames(df) %in% c("old1", . . . ,  "oldr")] <- c("new1", . . . , "newr")のように、ベクトルの要素の位置が古いものと新しいもので一致している必要があります。

行と列の追加・挿入・削除

行と列の追加及び削除について解説します。インデックスで指定する方法と行名や列名で指定する方法の2通りをまとめました。

インデックスで指定

インデックスでデータフレームに新しい行や列を追加及び削除する方法について見ていきます。

以下、インデックスで追加または削除する方法です。

  • 新しい行を追加したい場合は、df1[ncol(df) + 1, ] 
  • に新しい列を追加したい場合は、df1[, ncol(df) + 1]
  • 5行目と6行目の間に行newRowを挿入したいときは、rbind(df1[seq(1, 5), ], newRow, df1[seq(6, 10), ])
  • 2列目と3列目の間に列newColを挿入したいときは、cbind(df1[, seq(1, 2)], newCol, df1[, seq(3, 4)])
  • 5行目を削除したいときは、df[-5, ]
  • 2列目を削除したいときは、df[, -2]

データフレームに新しい行や列を追加したい場合は次のように、行数+1または列数+1の部分にベクトルを与えることでできます。行の削除は、削除したいインデックスにマイナスをつけることで可能です。

また、列に関しても同様に新しい列の追加と削除が可能です。以下、列の追加と削除実行例です。

データフレームの途中に行や列を挿入するには次のように関数rbind、cbindを用いて、挿入したい位置までのデータフレームと、新しい行または列のデータフレームと、挿入したい位置以降のデータフレームを連結させます。

行名や列名で指定

次に行名や列名で行や列を追加または削除する例を紹介します。

以下、行名や列名で行と列を追加または削除する方法です。

  • 行名"id:11"の新しい行を追加したい場合は、df1["id:11", ] 
  • 列名"LETTERS"の新しい列を追加したい場合は、df1[, "LETTERS"]
  • 行名"id:11"の行を削除したいときは、subset(df, subset = !(rownames(df) %in% "id:11"))
  • 列名"LETTERS"の列を削除したいときは、subset(df, select = setdiff(colnames(df), "LETTERS"))

行名を用いて新しい行を追加するには、次のようにデータフレームに新しい行名を与えることで実現できます。行の削除は関数subsetを用いて引数subsetを!(rownames(df1) %in% "削除したい行名")とすればおkです。

同様に列に関しても追加と削除が可能です。データフレームに新しく追加する列の列名を与えることでできます。列を削除する際は、関数subsetの引数selectに削除後の列名setdiff(colnames(df), "削除したい列名")にすることでできます。

データフレームの結合

2つのデータフレームを結合する方法を紹介します。次の3つのデータフレームdfA、dfB、dfCを例に結合する例をみていきます。

縦に結合

縦方向に結合させたいときは、関数rbindを用います。rbindは全く同じ列名をもつデータフレームにのみ適用できます。1つ目と2つ目の引数に2つのデータフレームを指定することでデータフレームを縦に結合できます。

横に結合

横方向に結合させたいときは、関数cbind、data.frameを用います。使い方はrbindのときと同じです。

data.frameはデフォルトで引数check.namesがTRUEであるため、2つのデータフレームが同じ列名を持っている場合、同じ列名にならないような処理が行われます。上ではdfBの列名"ID"が"ID.1"に変更されています。これを回避するには下のようにcheck.names = FALSEとします。

データフレームの併合・マージ

2つのデータフレームを併合させたいときは関数mergeを用います。実行すると次のように同じ列名に対して併合が行われます。下の例では、列名は"ID"と"letters"が同じです。"ID"と"letters"の要素が2つのデータフレームで同じもののみが併合対象となります。

列名"ID"のみで併合したいときは、引数byを”ID”にしましょう。

また、引数allをTRUEにすると、次のようにIDが同じでない行も含めて併合することができます。 2つのデータフレームに含まれていないIDは、次のようにNAで穴埋めされます。

データフレームのソートと並び替え

データフレームの行や列の並び替えはインデックスや行名、列名を与えることでできます。インデックスを指定する方法と行名や列名で指定する方法の2通りに分けて解説していきます。

インデックスで指定

次のようにデータフレームに順序を表すインデックスのベクトルを与えることで順序を変更することができます。

また、列の順番の変更も同様に可能です。

ソート

関数orderを使うことであるベクトルの要素の順番を得ることができます。データフレームを特定の列でソートしたいときは関数orderを使いましょう。

また、引数decreasingをTRUEにすると降順にできます。

また、次のように行方向に関するソートも可能です。

逆順

関数revを用いることでベクトルの要素を逆にできます。関数seqなどで列数分の数列を得た後にrevを適用することで、次のようにデータフレームを縦方向または横方向に逆転することができます。

行名や列名で指定

インデックスと同様に行名や列名をデータフレームに与えることでデータフレームの順番を変更することが可能です。

以下、上のインデックスで行ったものの行名および列名版です。

次のページへ >

スポンサーリンク

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

usagi-san

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

-R言語
-,