ここではデータフレームの扱い方について説明する。
データフレームの形式は以下のようなものである。
ラベル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 ...
要素番号を指定して個別の要素を取り出すには、角かっこで [行番号,列番号]
のように要素番号を指定する。
> df[5, 3]
各項目に付けられたラベルで要素を取り出すには、要素番号の代わりにラベルを指定する。
変数の後ろに $ラベル
を付けてもよい。
行番号(の範囲)を指定すると、その範囲の要素をまとめて取り出せる。
> df[5,]
> df[3:6,]
列番号(の範囲)を指定すると、その範囲の要素をまとめて取り出せる。 列の集合参照には何通りか方法があるが、戻り値が少し異なる。
変数がデータフレーム、tibble型、行列の場合をまとめて挙げる。
形式 | 変数がデータフレームの戻り値 | 変数が tibble 型の戻り値 | 変数が行列の戻り値 |
---|---|---|---|
変数[列番号] | 列の要素(データフレーム) | 列の要素(tibble 型) | 行列を1次元配列とした要素 |
変数["ラベル"] | 列の要素(データフレーム) | 列の要素(tibble 型) | |
変数[,列番号] | 列の要素(ベクトル) | 列の要素(tibble 型) | 列の要素(ベクトル) |
変数[,"ラベル"] | 列の要素(ベクトル) | 列の要素(tibble 型) | |
変数[[列番号]] | 列の要素(ベクトル) | 列の要素(ベクトル) | 行列を1次元配列とした要素 |
変数[["ラベル"]] | 列の要素(ベクトル) | 列の要素(ベクトル) | |
変数$ラベル | 列の要素(ベクトル) | 列の要素(ベクトル) |
頭に -
をつけて要素を指定すると、その要素以外の要素を取り出すことができる。
これを利用すれば、データフレームから任意の行や列を削除できる。
> df[-(10:19),]
条件式で条件を満たす要素だけを取り出すことができる。
> df[!is.na(df$Ozone) & df$Ozone >= 100,]
is.na(値)
は、値が NA
の場合は TRUE
、それ以外では FALSE
を返す。
Ozone の列には NA
が含まれているので、!is.na(df$Ozone)
を使って NA
を含む行を FALSE
にしている。
データフレームに列を追加するには cbind()
を使う。
データフレームに行を追加するには rbind()
を使う。
データフレームから列を削除するには、対象の列に NULL
を代入すると簡単にできる。
> df2$風速 <- NULL
データフレームから行を削除するには、対象の行を除外参照して代入する。
> df3 <- df3[-154,]