R のデータフレーム:
概要と作成

UB3/informatics/r/dataframe

このページの最終更新日: 2023/02/14

  1. 概要: データフレームとは
  2. データフレームを作成する

その他、データフレーム関連のページへのリンク


広告

概要: データフレームとは

R にはさまざまな データ型 があるが、データフレームはそのうちの一つで、データを格納した表または行列のような概念である。ExcelMySQL、MATLAB などに馴染みがあればわかりやすいだろう。例えばこのようなデータである。


Blood_type Body_weight
1 A 65
2 A 59
3 B 45

R のデータフレームには、次のような基本ルールがある。

  • 各行、各列が 必ずラベルをもち、ラベルによる操作が可能である点が行列 matrix と異なる (2)。この点は データフレームと行列の違い で詳しく説明している。
  • 行列は数値のみであるが、データフレームは文字列や数値が混在していても OK。「身長と血液型のように、numeric型と character型を混在させた行列」としてデータフレームを定義している サイト もある。
  • 整然データ の形で作成すると読み込みやすい (参考: 整然データとは何か)。つまり、1 つの列が変数、1 つの行が観測を表し、かつ 1 つのセルには単一の値のみが入っているデータである。
  • ラベルにスペースや特殊記号は使えない。読み込んだときに含まれているとドット . に変換される。元データは csv などで保存することが多いだろうが、この際に気をつけたい。

関連の深いページに ベクターの取り扱い がある。


データフレームを作成する

データフレームは、data.frame() 関数で作成できる。


ベクターを結合して作成する

以下のように列名を指定するのが基本である。

data.frame(列名1 = ベクター1, 列名2 = ベクター2, ...)

既存のベクターがないときには、以下のように data.frame コマンド内で指定しても OK。

A = data.frame(Blood_type = c("A","A","B"), Body_weight = c(65,59,45))

のようにする。以下のように > A とすることで、データフレームの内容を確認できる。

> A

Blood_type Body_weight
1 A 65
2 A 59
3 B 45


データフレームを結合して作成する

R では複数のデータフレームを結合することができる。

A = data.frame(Blood_type = c("A","A","B"), Body_weight = c(65,59,45))

B = data.frame(Hair_color = c("Black","Black","Brown"), Height = c(165,159,148))

このように 2 つのデータフレーム A と B があり、それらを結合したい場合には rbind または cbind 関数を使う。

C = cbind(Hair_color = c("Black","Black","Brown"), Height = c(165,159,148))

cbind は column bind なので、列として結合する。つまり 二つのデータフレームが横に繋がる。この場合、行の数が一致していないとエラーになる。

rbind は row bind で、二つのデータフレームが縦に繋がる。この場合、列の名前が一致していないと、Error in match.names(clabs, names(xi)): names do not match previous names というエラーになる。

C = data.frame(A + B) としたくなるが、これだとデータ構造を保ったまま値が合計される。上の例だと、Body_weight の 65 と、同じ位置にある Height の 165 が足される感じになる。実際には試していないので、文字列を含んでいる場合にどうなるのかわからない。いずれにせよ、データフレームの結合は rbind または cbind と覚えておく。


Excel ファイルや csv ファイルを読み込んで作成する

更新予定。read.xlsx() 関数、read.csv()、read_csv() 関数などをよく使っている。テキストファイルからのデータ読み込み も参照のこと。

for loop 用に空のデータフレームを作成する

for loop を回すときに、各 loop ごとの結果をデータフレームに入れたい場合がある。このとき、for loop の前に結果を格納する空のデータフレームを作っておく必要がある。

たぶん、リストの場合は NULL でも大丈夫だが、データフレームの場合は行・列の数を合わせておかないとエラーになると思う。

data.framere() と matrix() を組み合わせて使うようだ (参考)。nrow, ncol で行と列の数を指定できる

df = data.frame(matrix(ncol = 2, nrow = 0))
colnames(df) <- c("column1", "column2")


広告

References

  1. Rの data frame から行や列を選択して取り出す. Link.
  2. R-Tips 39. データフレーム事始. Link.
  3. 井関龍太のページ. Rでクリップボードからデータを読み込む. Link: Last access 2018/12/09.
  4. R:データフレームの列を入れ替える・削除する。 Link: Last access 2020/06/09.

コメント欄

サーバー移転のため、コメント欄は一時閉鎖中です。サイドバーから「管理人への質問」へどうぞ。