jnobuyukiのブログ

JavaScriptとR言語を中心に研究活動に役立つwebアプリケーション技術について考えていきます。twitter ID: @j_nobuyuki

R言語で複数のスペースで区切られたデータを読み込む

今回は本当にちょっとしたことですが、ハマる内容なので皆様と共有します。

read.table関数でテキストデータを読み込む

データ分析をするときに、何かのアプリケーションで作成したテキストデータをRに読み込ませることがあります。もっとも汎用的な関数はread.table関数です。この関数では、以下のようにファイル名、区切り文字、変数名ラベルの有無などを設定してRのデータフレーム型のオブジェクトとして読み込みます。

data <- read.table("ファイル名", sep = "", header = TRUE)

上記のうち、sepが区切り文字です。カンマ区切りなら","、タブ区切りなら"\t"にします。header はテキストファイルの1行目に変数名があるならTRUE、ないならFALSEにします。

複数のスペースで区切られたテキストファイルの読み込み

通常は上記のような操作でファイルを読み込めば良いので全く問題ありません。問題は、1つ以上の空白スペースで区切られたテキストファイルを読み込むときです。このようなファイルの場合、テキストファイルの見栄えをよくする都合で、変数間でスペースの数が異なることがしばしばあります。これをいかのような区切り文字にスペースを設定する方法だとうまくいきません。

data <- read.table("ファイル名", sep = " ", header = TRUE)

なぜうまくいかないかというと、上記の方法では区切り文字を「1文字の空白スペース」と指定しているからです。つまりスペースの数+1だけ変数があるとなってしまいます。

sep はデフォルトにすればよい

複数の空白スペースで区切られたファイルは、区切り文字をデフォルト""にするとうまく読み込めます。実は、区切り文字のデフォルトは1つまたは複数の空白スペースなんです。なので、空白スペースで区切られたテキストファイルを読み込むにはsepを設定しない(つまりデフォルト値を使う)または以下のように書けば良いでしょう。

data <- read.table("ファイル名", sep ="", header = TRUE)

R言語の場合、きめ細かく引数を設定するのが上手に使うコツの1つだと思うのですが、たまにはデフォルト値を信用してみるというのも大事なようです。