R オブジェクトの作成:
テキストファイルからのデータの読み込み
UBC/informatics/r/data_input_text
このページの最終更新日: 2023/02/14- テキストファイルを読み込む
- scan を使う方法
- read.table を使う方法
- テキストファイルからコピペする
- csv ファイルを読み込む
- tsv ファイルを読み込む
広告
テキストファイルを読み込む
テキストファイル とは、文字コードによって表されるデータのみを含むファイルのことである。書式、スタイル、画像などの余計な情報を含まないので、R を始め文字列情報を扱う環境では重宝される。
このページでは、テキストファイルを読み込むか、テキストファイルからのコピペでデータを R オブジェクトとして保存する方法についてまとめる。
クリップボードの形式が Mac と Win で違ったりするので、
scan を使う方法
最初の例として、以下のような改行で区切られたテキストファイルがどのように読み込まれるが調べてみる。
1 2 3 4 |
このテキストファイルの名前が text.txt だとして、A というオブジェクトに読み込む場合、以下のようにする。
なお、R の作業ディレクトリに text.txt がある場合は上記のコマンドで OK だが、そうでない場合は setwd() で作業ディレクトリを指定するか、ファイルのパスを指定する。list.files() で、カレントディレクトリにある R オブジェクトでないファイルを見ることができる。
また、この矢印 <- は等号 = でも OK であるが、関数のオプションを指定する際に = が使われることがあり、それと区別できるように <- を使うのが一般的な気がする。
A を表示すると [1] 1 2 3 4 のようになる。typeof(A) は doulbe を与える。よってオブジェクト型はベクターで、自明なので vector と表示されないことになる。is.vector(A) は TRUE、mode(A) は numeric となる (参考: R のデータフォーマット)。
次に、データが文字列の場合。
A B C D |
同じコマンドを実行すると、
というエラーになる。scan は実数 real を想定しているので、文字列のデータはそのままでは読み込めず、次のようにオプションを加える必要がある。
typeof(B) は character、is.vector(B) は TRUE となり、一次元の文字列ベクターとしてテキストファイルが読み込まれたことになる。
read.table を使う方法
上記の数字およびテキストのデータは、以下のように read.table を使っても読み込むことができる。
read.table と scan との違いは以下の通り。
- incomplete final line found by readTableHeader on 'test.txt' というエラーが出た。これは最後の行に改行がない場合にみられるエラーである。デフォルトの read.table では、データは改行で区切られていると考える。ただし、エラーは出るものの、最後の行もちゃんと読み込んでくれる。
- typeof(C) は list、is.data.frame(C) は TRUE を与える。値の 1, 2, 3, 4 は 1 行目 V1 に格納される。
read.table で文字列データを読み込むと、ちょっとややこしい結果になる。
最終行に改行が必要なのは数値データと同じ。オブジェクト型は list である。mode(B$V1) のようにして読み込まれたデータのモードを調べると、numeric と出てくる。どうもアルファベットまで数字として認識されているようである。read.table でデータ型を指定するには以下のようにする。
テキストファイルからコピペする
上にも書いたように、あまりお勧めの方法ではない。Mac と Windows ではクリップボードの形式が違うので、このコマンドも異なることに注意する。
1 行目をヘッダーにしたいときは
とする。ただし、この方法だとデータ型は基本型が list、クラス型が data.frame になり、かつ V1, V2 というデータラベルが勝手につけられてしまう。
Error log
- Warning message: In read.table(pipe("pbpaste")):incomplete final line found by readTableHeader on 'pbpaste' というメッセージが現れた場合、一番下に一行空白行をクリップボードにコピーするようにすると、このメッセージが出なくなる。
- Windows R version 3.1.2 では、Error in read.table(pipe("pbpaste")): no lines available in input というエラーが出てしまう。

csv ファイルを読み込む
csv は comma separated values の略で、csv ファイルとはコンマ、スペース、タブなどを区切り文字としたテキストファイルである。csv 形式で保存されたデータは、read.csv 関数で読み込むことができる。
- 同じディレクトリに csv ファイルがない場合は、もちろんパスを指定しなければならない。現在のディレクトリは > getwd() で調べることができる。
- ヘッダー行に情報がない場合、X という文字が割り振られる。複数あると X, X.1, X.2... となる。
- データに情報がない場合、NA が割り振られる。
- row.names = 1 は、1 行目を列の名前として使うという意味。
read.csv で読み込まれたデータは、typeof() で調べるとリスト形式になっているようだ。heatmap を描く際には、これは行列 matrix でなければならないので、以下のように変換する。
また、データフレームを csv ファイルとして書き出すときは write.csv なので、read.csv と合わせて覚えておくと良いだろう。
csv の区切りが反映されない場合、read.delim を使うこともできる。形式は同じ。
tsv ファイルを読み込む
tsv ファイル (タブ区切りテキストファイル) は read.table で読み込める。
- 1 行目をヘッダーにしたいときは header = TRUE とする。
広告
References
- R でのテキストファイル読み出しと書き込み. Link: Last access 2020/01/25.
- R:read.csv / read.tableで型と列名を指定して読み込む。Link: Last access 2020/01/25.
- 井関龍太のページ. Rでクリップボードからデータを読み込む. Link: Last access 2018/12/09.
コメント欄
サーバー移転のため、コメント欄は一時閉鎖中です。サイドバーから「管理人への質問」へどうぞ。