R オブジェクトの作成:
テキストファイルからのデータの読み込み

UBC/informatics/r/data_input_text

このページの最終更新日: 2020/02/14

  1. テキストファイルを読み込む
    • scan を使う方法
    • read.table を使う方法
  2. テキストファイルからコピペする
  3. csv ファイルを読み込む

広告

テキストファイルを読み込む

テキストファイル とは、文字コードによって表されるデータのみを含むファイルのことである。書式、スタイル、画像などの余計な情報を含まないので、R を始め文字列情報を扱う環境では重宝される。

このページでは、テキストファイルを読み込むか、テキストファイルからのコピペで データを R オブジェクトとして保存する方法についてまとめる。


scan を使う方法

最初の例として、以下のような改行で区切られたテキストファイルがどのように読み込まれるが調べてみる。

1
2
3
4

これを DataA というオブジェクトに読み込む場合、以下のようにする。Read 4 items のように、読み込まれたデータの数を表示してくれる。

> DataA <- scan("test.txt")
Read 4 items

なお、R の作業ディレクトリに text.txt がある場合は上記のコマンドで OK だが、そうでない場合は setwd() で作業ディレクトリを指定するか、ファイルのパスを指定する。list.files() で、カレントディレクトリにある R オブジェクトでないファイルを見ることができる。

DataA を表示すると [1] 1 2 3 4 のようになる。typeof(DataA) は doulbe を与える。よってオブジェクト型はベクターで、自明なので vector と表示されないことになる。is.vector(DataA) は TRUE、mode(DataA) は numeric となる。

次に、データが文字列の場合。

A
B
C
D

同じコマンドを実行すると、

Error in scan("test.txt") : scan() expected 'a real', got 'A'

というエラーになる。scan は実数 real を想定しているので、文字列のデータはそのままでは読み込めず、次のようにオプションを加える必要がある。

> DataB <- scan("test.txt", what=character())

typeof(DataA) は character、is.vector(DataA) は TRUE となり、一次元の文字列ベクターとしてテキストファイルが読み込まれたことになる。


read.table を使う方法

上記のデータは、以下のように read.table を使っても読み込むことができる。

> DataC <- read.table("test.txt")

scan との違いは以下の通り。

  • incomplete final line found by readTableHeader on 'test.txt' というエラーが出た。これは最後の行に改行がない場合にみられるエラーである。デフォルトの read.table では、データは改行で区切られていると考える。ただし、エラーは出るものの、最後の行もちゃんと読み込んでくれる。
  • typeof(DataC) は list、is.data.frame(DataC) は TRUE を与える。値の 1, 2, 3, 4 は 1 行目 V1 に格納される。

read.table で文字列データを読み込むと、ちょっとややこしい結果になる。

最終行に改行が必要なのは数値データと同じ。オブジェクト型は list である。mode(DataB$V1) のようにして読み込まれたデータのモードを調べると、numeric と出てくる。どうもアルファベットまで数字として認識されているようである。read.table でデータ型を指定するには以下のようにする。

> DataC <- read.table("test.txt", colClasses = c("character"))


広告

テキストファイルからコピペする

Mac と Windows ではクリップボードの形式が違うので、このコマンドも異なることに注意する。

Mac (おそらく Linux も) では、データファイルにしたい領域をラベルも含めてコピーした後に、

> C=read.table(pipe("pbpaste"))

とする。または、1行目をヘッダーにするというオプションを加えて

> C=read.table(pipe("pbpaste"),header=TRUE)

とする方法もある。

ただし、この方法だとデータ型は基本型が list、クラス型が data.frame になり、かつ V1, V2 というデータラベルが勝手につけられてしまう。

Windows では、このコマンドは read.table("clipboard") となる (3)。


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 ファイルを読み込む

Excel を .csv で別名保存し、> A=read.csv('filename') で読み込むことができる (3)。 Windows R 3.1.2 で有効なことを確認 (4-5-2015)。 filename には .csv を含める必要がある。

  • 同じディレクトリに csv ファイルがない場合は、パスを指定しなければならない。
  • 現在のディレクトリは > getwd() で調べることができる。

広告

References

  1. R でのテキストファイル読み出しと書き込み. Link: Last access 2020/01/25.
  2. R:read.csv / read.tableで型と列名を指定して読み込む。Link: Last access 2020/01/25.
  3. 井関龍太のページ. Rでクリップボードからデータを読み込む. Link: Last access 2018/12/09.

コメント欄

各ページのコメント欄を復活させました。スパム対策のため、以下の禁止ワードが含まれるコメントは表示されないように設定しています。レイアウトなどは引き続き改善していきます。「管理人への質問」「フォーラム」へのバナーも引き続きご利用下さい。

禁止ワード: http, the, м (ロシア語のフォントです)


このページにコメント

Name:


Comment:



これまでに投稿されたコメント

Date Name Comment