ユーザ用ツール

サイト用ツール


r:basic2

R の基本2(データフレーム)

ここではデータフレームの扱い方について説明する。

データフレームの形式

データフレームの形式は以下のようなものである。

ラベル1 ラベル2
ID1 要素1-1 要素1-2
ID2 要素2-1 要素2-2

要素の参照方法は後述するが、要素は行・列・ラベルのいずれかで指定する。

既存のデータセット

R にはあらかじめデータセットがいくつか用意されており、その中にはデータフレームが多くある。

例えば、airquality は 1973 年にニューヨークで観測されたオゾン濃度1)などの時系列データである。

ラベル 説明
1 Ozone 平均オゾン濃度 [ppb] (ルーズベルト島、13時から15時)
2 Solar.R 太陽放射エネルギー密度 [ly] (セントラルパーク、8時から12時)
3 Wind 平均風速 [mph] (ラガーディア空港、7時から10時)
4 Temp 日最高温度 [°F] (ラガーディア空港)
5 Month 観測した月
6 Day 観測した日

単位は主にアメリカで使われている単位である。

単位 意味
ppb parts per billion の略で、十億分率のこと。大気中の分子10億個中にあるオゾンの個数を表す。
ly ラングレーといい、1平方センチメートルに1分間に到達する放射量をカロリーで表した単位である。
mph miles per hour の略で、マイル毎時という。1マイルは 1.609344 kmである。
°F 華氏(ファーレンハイト)温度の単位である。華氏温度 $F$ から摂氏(セルシウス)温度へは $\frac{5}{9}(F-32)$ で変換される。

airquality を変数 df に代入して使用する場合はコンソールに次のように入力する。

> df <- airquality

コンソールに単純に df と入力すると内容が表示される。

> df

ただし、大きいデータだとコンソールでは見にくいので、 RStudio では右上のペインの Environment にリストされる変数 df をクリックすると左上のペインに df の内容が表示される。

以下ではこの df を使って例を示す。

データフレームの情報

データフレームの情報を表示するための関数には以下のようなものがある。

関数 機能
dim(データフレーム) データフレームの次元を返す。
nrow(データフレーム) データフレームの行数を返す。
ncol(データフレーム) データフレームの列数を返す。
colnames(データフレーム) データフレームの列のラベルをベクトルで返す。
rownames(データフレーム) データフレームの行のラベルをベクトルで返す。
str(データフレーム) データフレームの構造を表示する。

dim() では行数と列数が一度に表示される。

> dim(df)
[1] 153   6

df は 153 行 6 列のデータであることが分かる(ラベルはカウントしない)。

str() では少し詳しい情報が表示される。

> str(df)
'data.frame':	153 obs. of  6 variables:
 $ Ozone  : int  41 36 12 18 NA 28 23 19 8 NA ...
 $ Solar.R: int  190 118 149 313 NA NA 299 99 19 194 ...
 $ Wind   : num  7.4 8 12.6 11.5 14.3 14.9 8.6 13.8 20.1 8.6 ...
 $ Temp   : int  67 72 74 62 56 66 65 59 61 69 ...
 $ Month  : int  5 5 5 5 5 5 5 5 5 5 ...
 $ Day    : int  1 2 3 4 5 6 7 8 9 10 ...

要素の参照

単純参照

要素番号を指定して個別の要素を取り出すには、角かっこで [行番号,列番号] のように要素番号を指定する。

例)5行3列目の要素の参照

> df[5, 3]

名前付き参照

各項目に付けられたラベルで要素を取り出すには、要素番号の代わりにラベルを指定する。 変数の後ろに $ラベル を付けてもよい。

例)5行3列目の要素の参照

> df[5, "Wind"]
> df$Wind[5]

行の集合参照

行番号(の範囲)を指定すると、その範囲の要素をまとめて取り出せる。

例)5行目の要素の参照

> df[5,]

例)3,10行目の参照

> df[c(3, 10),]

例)3〜6行目の参照

> df[3:6,]

列の集合参照

列番号(の範囲)を指定すると、その範囲の要素をまとめて取り出せる。 列の集合参照には何通りか方法があるが、戻り値が少し異なる。

変数がデータフレーム、tibble型、行列の場合をまとめて挙げる。

形式 変数がデータフレームの戻り値 変数が tibble 型の戻り値 変数が行列の戻り値
変数[列番号] 列の要素(データフレーム) 列の要素(tibble 型) 行列を1次元配列とした要素
変数["ラベル"] 列の要素(データフレーム) 列の要素(tibble 型)
変数[,列番号] 列の要素(ベクトル) 列の要素(tibble 型) 列の要素(ベクトル)
変数[,"ラベル"] 列の要素(ベクトル) 列の要素(tibble 型)
変数[[列番号]] 列の要素(ベクトル) 列の要素(ベクトル) 行列を1次元配列とした要素
変数[["ラベル"]] 列の要素(ベクトル) 列の要素(ベクトル)
変数$ラベル 列の要素(ベクトル) 列の要素(ベクトル)

例)3列目の要素の参照

ベクトルとしての参照

> df[, 3]
> df[, "Wind"]
> df$Wind

データフレームとしての参照

> df["Wind"]
> df[3]

例)1,3,5列目の要素の参照

> df[, c(1, 3, 5)]
> df[c(1, 3, 5)]

例)2〜4列目の参照

> df[, 2:4]
> df[2:4]

除外参照

頭に - をつけて要素を指定すると、その要素以外の要素を取り出すことができる。 これを利用すれば、データフレームから任意の行や列を削除できる。

例)3列目以外の参照

> df[, -3]
> df[-3]

例)2,4列目以外の参照

> df[, -c(2, 4)]
> df[-c(2, 4)]

例)10〜19行目以外の参照

> df[-(10:19),]

条件付き参照

条件式で条件を満たす要素だけを取り出すことができる。

例)平均風速が10mph以上の行の参照

> df[df$Wind >= 10,]

この意味は、df$Wind >= 10 だけを実行してみると分かる。

例)平均オゾン濃度が100ppb以上の行の参照

> df[!is.na(df$Ozone) & df$Ozone >= 100,]

is.na(値) は、値が NA の場合は TRUE、それ以外では FALSE を返す。 Ozone の列には NA が含まれているので、!is.na(df$Ozone) を使って NA を含む行を FALSE にしている。

例)平均オゾン濃度が100ppb以上または平均風速が10mph以上の行の参照

> df[(!is.na(df$Ozone) & df$Ozone >= 100) | df$Wind >= 10,]

ソート

例)平均風速の小さい順にソート

> df[order(df$Wind),]

例)平均風速の大きい順にソート

> df[order(-df$Wind),]

例)平均風速の小さい順にソートし、平均風速が同じ場合は平均オゾン濃度の小さい順にソート

> df[order(df$Wind, df$Ozone),]

要素の追加

列の追加

データフレームに列を追加するには cbind() を使う。

例)平均風速をkm毎時に変換して列を追加

> df2 <- cbind(df, 風速 = df$Wind * 1.609344)

「風速」というラベルの列が最後の列に追加されて変数 df2 に代入される。


行の追加

データフレームに行を追加するには rbind() を使う。

例)1,2,3,4,5,6 という値を持つ行を追加

> df3 <- rbind(df, c(1, 2, 3, 4, 5, 6))

新しい行が最後の行に追加されて変数 df3 に代入される。

要素の削除

列の削除

データフレームから列を削除するには、対象の列に NULL を代入すると簡単にできる。

例)df2 から「風速」のラベルの列を削除

> df2$風速 <- NULL

行の削除

データフレームから行を削除するには、対象の行を除外参照して代入する。

例)df3 から 154行目を削除

> df3 <- df3[-154,]
1)
オゾンは酸素原子が3つ結合した分子である。大気中のオゾン濃度が高い層はオゾン層と呼ばれ、太陽光の紫外線を吸収する効果がある。
r/basic2.txt · 最終更新: 2023/09/28 19:28 by yuki