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), "削除したい列名")にすることでできます。