内容へ移動
講義(山本裕樹)
ユーザ用ツール
ログイン
サイト用ツール
検索
ツール
文書の表示
バックリンク
最近の変更
メディアマネージャー
サイトマップ
ログイン
>
最近の変更
メディアマネージャー
サイトマップ
トレース:
r:basic2
この文書は読取専用です。文書のソースを閲覧することは可能ですが、変更はできません。もし変更したい場合は管理者に連絡してください。
====== R の基本2(データフレーム) ====== ここではデータフレームの扱い方について説明する。 ===== データフレームの形式 ===== データフレームの形式は以下のようなものである。 ^ ^ ラベル1 ^ ラベル2 ^ … ^ ^ ID1 | 要素1-1 | 要素1-2 | … | ^ ID2 | 要素2-1 | 要素2-2 | … | ^ … | … | … | … | 要素の参照方法は後述するが、要素は行・列・ラベルのいずれかで指定する。 ===== 既存のデータセット ===== R にはあらかじめデータセットがいくつか用意されており、その中にはデータフレームが多くある。 例えば、airquality は 1973 年にニューヨークで観測されたオゾン濃度((オゾンは酸素原子が3つ結合した分子である。大気中のオゾン濃度が高い層はオゾン層と呼ばれ、太陽光の紫外線を吸収する効果がある。))などの時系列データである。 ^ 列 ^ ラベル ^ 説明 ^ | 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 に代入して使用する場合はコンソールに次のように入力する。 <code rsplus> > df <- airquality </code> コンソールに単純に df と入力すると内容が表示される。 <code rsplus> > df </code> ただし、大きいデータだとコンソールでは見にくいので、 RStudio では右上のペインの Environment にリストされる変数 df をクリックすると左上のペインに df の内容が表示される。 以下ではこの df を使って例を示す。 ===== データフレームの情報 ===== データフレームの情報を表示するための関数には以下のようなものがある。 ^ 関数 ^ 機能 ^ | ''dim(データフレーム)'' | データフレームの次元を返す。 | | ''nrow(データフレーム)'' | データフレームの行数を返す。 | | ''ncol(データフレーム)'' | データフレームの列数を返す。 | | ''colnames(データフレーム)'' | データフレームの列のラベルをベクトルで返す。 | | ''rownames(データフレーム)'' | データフレームの行のラベルをベクトルで返す。 | | ''str(データフレーム)'' | データフレームの構造を表示する。 | ''dim()'' では行数と列数が一度に表示される。 <code rsplus> > dim(df) [1] 153 6 </code> df は 153 行 6 列のデータであることが分かる(ラベルはカウントしない)。 ''str()'' では少し詳しい情報が表示される。 <code rsplus> > 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 ... </code> ===== 要素の参照 ===== ==== 単純参照 ==== 要素番号を指定して個別の要素を取り出すには、角かっこで ''[行番号,列番号]'' のように要素番号を指定する。 === 例)5行3列目の要素の参照 === <code rsplus> > df[5, 3] </code> ---- ==== 名前付き参照 ==== 各項目に付けられたラベルで要素を取り出すには、要素番号の代わりにラベルを指定する。 変数の後ろに ''$ラベル'' を付けてもよい。 === 例)5行3列目の要素の参照 === <code rsplus> > df[5, "Wind"] > df$Wind[5] </code> ---- ==== 行の集合参照 ==== 行番号(の範囲)を指定すると、その範囲の要素をまとめて取り出せる。 === 例)5行目の要素の参照 === <code rsplus> > df[5,] </code> === 例)3,10行目の参照 === <code rsplus> > df[c(3, 10),] </code> === 例)3〜6行目の参照 === <code rsplus> > df[3:6,] </code> ---- ==== 列の集合参照 ==== 列番号(の範囲)を指定すると、その範囲の要素をまとめて取り出せる。 列の集合参照には何通りか方法があるが、戻り値が少し異なる。 変数がデータフレーム、tibble型、行列の場合をまとめて挙げる。 ^ 形式 ^ 変数がデータフレームの戻り値 ^ 変数が tibble 型の戻り値 ^ 変数が行列の戻り値 ^ | ''変数[列番号]'' | 列の要素(データフレーム) | 列の要素(tibble 型) | 行列を1次元配列とした要素 | | ''変数%%["ラベル"]%%'' | 列の要素(データフレーム) | 列の要素(tibble 型) | | | ''変数[,列番号]'' | 列の要素(ベクトル) | 列の要素(tibble 型) | 列の要素(ベクトル) | | ''変数%%[,"ラベル"]%%'' | 列の要素(ベクトル) | 列の要素(tibble 型) | | | ''変数%%[[列番号]]%%'' | 列の要素(ベクトル) | 列の要素(ベクトル) | 行列を1次元配列とした要素 | | ''変数%%[["ラベル"]]%%'' | 列の要素(ベクトル) | 列の要素(ベクトル) | | | ''変数$ラベル'' | 列の要素(ベクトル) | 列の要素(ベクトル) | | === 例)3列目の要素の参照 === ベクトルとしての参照 <code rsplus> > df[, 3] > df[, "Wind"] > df$Wind </code> データフレームとしての参照 <code rsplus> > df["Wind"] > df[3] </code> === 例)1,3,5列目の要素の参照 === <code rsplus> > df[, c(1, 3, 5)] > df[c(1, 3, 5)] </code> === 例)2〜4列目の参照 === <code rsplus> > df[, 2:4] > df[2:4] </code> ---- ==== 除外参照 ==== 頭に ''-'' をつけて要素を指定すると、その要素以外の要素を取り出すことができる。 これを利用すれば、データフレームから任意の行や列を削除できる。 === 例)3列目以外の参照 === <code rsplus> > df[, -3] > df[-3] </code> === 例)2,4列目以外の参照 === <code rsplus> > df[, -c(2, 4)] > df[-c(2, 4)] </code> === 例)10〜19行目以外の参照 === <code rsplus> > df[-(10:19),] </code> ---- ==== 条件付き参照 ==== 条件式で条件を満たす要素だけを取り出すことができる。 === 例)平均風速が10mph以上の行の参照 === <code rsplus> > df[df$Wind >= 10,] </code> この意味は、''df$Wind >= 10'' だけを実行してみると分かる。 === 例)平均オゾン濃度が100ppb以上の行の参照 === <code rsplus> > df[!is.na(df$Ozone) & df$Ozone >= 100,] </code> ''is.na(値)'' は、値が ''NA'' の場合は ''TRUE''、それ以外では ''FALSE'' を返す。 Ozone の列には ''NA'' が含まれているので、''!is.na(df$Ozone)'' を使って ''NA'' を含む行を ''FALSE'' にしている。 === 例)平均オゾン濃度が100ppb以上または平均風速が10mph以上の行の参照 === <code rsplus> > df[(!is.na(df$Ozone) & df$Ozone >= 100) | df$Wind >= 10,] </code> ---- ==== ソート ==== === 例)平均風速の小さい順にソート === <code rsplus> > df[order(df$Wind),] </code> === 例)平均風速の大きい順にソート === <code rsplus> > df[order(-df$Wind),] </code> === 例)平均風速の小さい順にソートし、平均風速が同じ場合は平均オゾン濃度の小さい順にソート === <code rsplus> > df[order(df$Wind, df$Ozone),] </code> ===== 要素の追加 ===== ==== 列の追加 ==== データフレームに列を追加するには ''cbind()'' を使う。 === 例)平均風速をkm毎時に変換して列を追加 === <code rsplus> > df2 <- cbind(df, 風速 = df$Wind * 1.609344) </code> 「風速」というラベルの列が最後の列に追加されて変数 df2 に代入される。 ---- ==== 行の追加 ==== データフレームに行を追加するには ''rbind()'' を使う。 === 例)1,2,3,4,5,6 という値を持つ行を追加 === <code rsplus> > df3 <- rbind(df, c(1, 2, 3, 4, 5, 6)) </code> 新しい行が最後の行に追加されて変数 df3 に代入される。 ===== 要素の削除 ===== ==== 列の削除 ==== データフレームから列を削除するには、対象の列に ''NULL'' を代入すると簡単にできる。 === 例)df2 から「風速」のラベルの列を削除 === <code rsplus> > df2$風速 <- NULL </code> ---- ==== 行の削除 ==== データフレームから行を削除するには、対象の行を除外参照して代入する。 === 例)df3 から 154行目を削除 === <code rsplus> > df3 <- df3[-154,] </code>
r/basic2.txt
· 最終更新: 2023/09/28 10:28 by
yuki
ページ用ツール
文書の表示
バックリンク
文書の先頭へ