『【RStudio】RStudioを使う』シリーズでは、RStudioを使ってデータの統計処理、グラフの描画をしていきます。
第六弾の今回は、「stringrパッケージを使って文字列操作」をしていきます。
文字列操作とデータって関係ないじゃん!って思う方もいるかもしれません。
データに名前をつけたり、結果を保存したりするときには文字列操作はできるようになっていた方が良い操作の一つです。
「RStudioを使う#2」で描いたフローチャートの個々の部分をやっていきます。
目指すデータの形
Rでグラフを描くために、ImageJマクロを動かして細胞を計数した結果を集計しているのでした。
計数した結果を集めるのは、『RStudioを使う#4』でできるようになりました。
が、データだけ集めたので、どんな条件で計数したものなのか?どのサンプルから取ってきたものなのか?がわからない状態です。
グラフを描くためにも、データとサンプル名、実験条件をリンクさせた表を作っておきましょう。
今回目指すのはこんなデータの形です。
実験条件、サンプルの名前はあらかじめ計数データが入っているファイルについているので、ファイルの名前を操作して取り出して来ようと思います。
今回使ったファイル名の付け方はこちら。
ImageJマクロを動かして細胞を計数する方法はこちら
Rで描こうと思っているグラフの形はこちら
stringrの使い方
ファイル名の文字列操作には、前回の『RStudioを使う#5』でインストールした"tidyverse"パッケージの中に入っている"stringr"を使います。
そもそも"stringr"とはどんなパッケージなのでしょうか?
文字列操作をする"stringr"
文字列操作をするだけであれば、Rに元々入っている関数だけでなんとかなります。
が、わざわざ"stringr"を使うと初心者にもわかりやすく簡単に文字列を操作することができるのです。
詳しくはこちらのサイトをご覧ください。
この記事では"stringr"に搭載さている全ての関数は紹介しきれないので、すぐに使う関数の使い方だけを簡単にまとめていきます。
文字列を分割してリストで返す"str_split"
文字列をある基準に従って分割するときには、"str_split"を使っていきます。
Rに元々同じような関数、"strsplit"もあります。
基本的にはどちらを使っても、動作にそんなに大きな差があるわけではありません。
使い方は、
文字列と分割するパターンを指定すると、リストの形で返してくれます。
Rに元々入っている"strsplit"でも同じように操作ができます。
これだけだったら"str_split"でも"strsplit"でもどちらを使っても変わりがないので、わざわざ"tidyverse"をインストールして"stringr"を使う必要はありません。
"str_split"を使うと便利なのは、「リスト」の形だけではなくて「マトリックス」の形で結果を出力できるようにしてくれることです。
Rの「リスト」とは、エクセルで言うと一つのセルの中に情報がたくさん入っているもので、初心者の私には少し扱いづらい。
「マトリックス」にすると、エクセルの一つのセルに一つの情報が入っている状態になって扱いやすくなります。
「マトリックス」で出力させるためには、"str_split"の引数"simplify"をTRUEにする(simplify = T)にするだけ。
他にも元々"simplify = T"になっている(設定しなくてもマトリックスにしてくれる)関数"str_split_fixed"がありますが、これを使う場合は「いくつに分割するか」を指定しないとエラーが出てしまうので注意が必要です。
"str_split"を使ってファイル名からサンプル名を取得する
では、取得しているファイル名からサンプル名を取り出していきましょう。
まずは、今までに準備している変数に入っている中身を確認して見ましょう。
ファイルリストを取得することで得られた「ファイル名」を見てみると、
・全部"_"で区切られている
・先頭に条件の名前がある
・"_count_result"の前にサンプル名がある
ことがわかります。
"str_split"を使ってfilelist[1]を分割して見ます。
分割した結果を変数"filename"に入れました。
マトリックスの1行目一列目([1,1])に条件の名前、1行目五列目([1,5])にサンプルの名前が入っています。
"filename"の後ろに参照したい結果の場所を入力すると、そこの結果だけをみることができます。
『ImageJマクロを使う#7』で解析結果のファイルには、最初に条件の名前、最後に"_count_result.csv"をつけるように統一しています。
filename[1,1]は必ず条件の名前、filenameの後ろから3番目は必ずサンプル番号になるようになっているので、filenameの長さを変数に入れて統一できるようにしていきます。
これで、ファイルの名前から条件の名前とサンプル番号を出力できるようになりました。
for文に入れてデータフレームを作る
条件の名前、サンプル番号、計数結果を全て入れたデータフレームを作っていきましょう。
書いたfor文はこちら。
filelist[1]としていたところをfilename[i]としただけで、あとは今まで書いてきたコードをそのままfor文に入れています。
for文を回した結果...
準備したベクトルに、条件の名前、サンプル番号、計数結果が入っていました。
最後に、準備したベクトルをデータフレームの形にしていきましょう。
Rでデータフレームを作る関数は"data.frame"です。
"data.frame"関数を使ってデータフレームを作っていきましょう。
列の名前とベクトルの名前が一緒なので少しわかりにくいかもしれません。
列の名前とベクトルの名前が一緒であれば、わざわざ(名前1=ベクトル1...)と書かなくても良いです。
手動のものと比較するために"macro"という変数にデータフレームを入れています。
この記事では、集めたい文字列情報を"str_split"で取得してfor文を使ってデータフレームの形にするまでやってきました。
次回は、手動の計数結果を読み込んで二つの結果を比較検定して行きます。