今回のサンプルデータセットはbootパッケージのbeaverです。忘却力の年寄なので定かではありませんが、どこかで見た気がします。デジャヴ?記憶は定かでなくても記事のindexをたどれば発見。datasetsパッケージのbeaversデータセットがビンゴであります。結論からいうと部分一致だけれども形式が違いました。
※「データのお砂場」投稿順Indexはこちら
beaverサンプルデータセット
もし以前に練習したbeaversと同じデータであれば、練習するまでもありません。パスする気満々で次へ行くかと。以前、datasetsパッケージで練習したときの記事は以下です。
データのお砂場(46) R言語、beavers、ビーバー2匹の体温の測定とな
Datasetsパッケージの中のbeaversサンプルデータセットは、ある2匹のビーバーさんの晩秋から初冬の一日の体温と活動状況のデータでした。お外へ出て動き回っているときの体温は高め、みたいなデータです。
当方の「勝手調査」の結果、以下のようではないかと推測します。
-
- データセットの出典は同じ。4匹のビーバーについて取得したデータ(1990年)である。
- beaversデータセットでは、そのうち2匹のビーバーについてのそれぞれほぼ1日分のデータを傘下のデータセットとしている。
- beaver1というビーバーさんの December 12-13のデータとbeaver2というビーバーさんの November 3-4のデータ
- bootパッケージのbeaverデータセットの「内容」は、上記のbeaver2データと一致した。
- しかしbeaversは単純なデータフレーム、beaverは時系列データ(ts)、ただしデータフレームも継承と入れ物の形式が異なる。
ううむ、同じデータだけれども「入れ物」形式が異なるので、R言語の練習としてはやっておくべきってこと?
一応、データの一致を確認したsummaryを以下に掲げておきます。上がdatasetのbeaversサンプルデータのbeaver2のデータ、下がbootパッケージのbeaverデータです。
まずは生データ
datasetsパッケージはデフォルトで利用可能な設定になっているので、bootパッケージをlibrary指定したのち、beaverとbeaversの両方のデータセットをロードしてみます。
str()の結果をみると差は一目瞭然。beaverはTime-Seriesデータで、beaversはdata.frameです。
しかし、beaverはTime-Seriesといいつつ、中身にdata.frameが詰まっているような形式みたいなので、ダンプしてみると以下のような感じです(表示は先頭部分のみ。)
プロットしてみる
時系列データであるので、plot.tsの対象になる筈。ということでやってみます。
plot.ts(beaver)
4つのフィールド毎に時系列プロットができますな。dayが日付(番号)、timeが分単位の時刻、tempが体温で、activが活動度というか、ぶっちゃけ隠れ家の中にいたら0、お外へ出ていたら1ということみたいです。
「デジャヴ」回ではtempのプロットをちょっと加工していたので、それと同様なプロットを試みてみることにします。
まずは各フィールドへのアクセス。Time-Seriesなので、data.frameのときのように以下のような方法ではエラーとなります。
Time-Seriesの末尾の100番目のデータを対象に個別のフィールドへのアクセスを行ってみます。ターゲット付近のデータが以下に。
単純に以下のようにすると、最初のdayフィールドの値が取り出せます。
2次元のアクセスとして、1を指定するとやはりdayフィールドが、2でtime、3でtempのように個々の値にアクセスできます。
時系列の100と指定している部分を省略すると、その列全てを取り出すことができます。こんな感じ。
これだけわかれば、「デジャヴ」回で行ったのと同等なプロットが可能とできます。オペレーションはこんな感じ。
plot(beaver[,3], ylab="Temp") abline(h=37.5, col="red", lty=2) is.act <- beaver[,4]==1 points(time(beaver)[is.act], beaver[is.act,3], col = 2, cex = .8)
新味はなかったけど、Time-Seriesの練習にはなった?