統計解析環境「R」で特定の文字列が含まれる行を抽出する |
たとえば、縄文中期の遺跡だけ抽出したい、という場合どうしたらよいだろう?
ネット上を色々調べたけれど、結局良い方法が見つけられなかったので、がんばって自分でコードを書いてみた。
一応、自分用のメモだけれど、誰かの役に立つかなあ?
1行目
道南の遺跡データ<-read.csv("C:/Users/●●●/Documents/●●●/isekidata_csv/isekidatabase9_wl2.csv",stringsAsFactor=FALSE)
遺跡一覧表のcsvデータを呼び出して、「道南の遺跡データ」というオブジェクトに付値する。
2つめの引数「stringsAsFactor」は、文字列をカテゴリーデータにするか単なる文字列にするかを指定する。
よくわからないのだけれど、grep関数を使う関係上、カテゴリーデータだと不具合がありそうなので、一応、「FALSE」を指定して、単なる文字列として読み込んでいる。
2行目
縄文中期の行番号<-grep("中期",道南の遺跡データ$period)
grep関数を使って、「道南の遺跡データ」のperiod列から「中期」という文字列が入っている行番号を抜き出して、「縄文中期の行番号」というオブジェクトに付置する。
grep関数は、第1引数の文字列を第2引数で指定したオブジェクトの中から探してその行番号を返す。
「行番号を返す」というところがポイント。
grep関数が返すのは、あくまでも文字列の入っている行番号の羅列であって、特定の行そのものを抜き出してくれるわけではない。
そこで3行目
縄文中期の遺跡一覧<-道南の遺跡データ[縄文中期の行番号[1: length(縄文中期の行番号)],]
「道南の遺跡データ」から"中期"という文字の入っている行を抜き出すために、「縄文中期の行番号」に付置した行番号を使って、「道南の遺跡データ」から行を抽出し、「縄文中期の遺跡一覧」という新たなオブジェクトに付置する。
以上で、縄文中期の遺跡が全て抜き出された縄文中期の遺跡一覧表が完成する。
この作業を全ての時代に対して繰り返し行って、データを全部結合すると、いろんな属性がごちゃ混ぜになったデータから、念願の、下のようなグラフが描画できる。