<<目次へ


データの読み込み



 Rでは x <- c(1,2,3,4,5) とすることによって、ある変数にデータを代入することができるが、この方法では大量のデータを扱うことは難しい。実際、実験や調査によって得られたデータはExcelなどの表計算ソフトに保存しておくことが多い。そこで、ここでは外部からデータを読み込む方法を紹介しよう。


方法1 scan()を用いる

 例えば、以下のようなデータがmydata.txtというファイル名でワークディレクトリに保存されていたとする。

--- mydata.txt ---
1       6       11
2       7       12
3       8       13
4       9       14
5       10      15
------------------

 このとき:

> dat <- scan("mydata.txt")

とコマンドすることで変数datにmydata.txtに保存されているデータが代入される。ただし、scan()はベクトルとして扱われるうえ、行単位で読み込むのでdatの中身を確認してみると:

> dat
 [1]  1  6 11  2  7 12  3  8 13  4  9 14  5 10 15

といったように、バラバラになってしまっていることが確認できるだろう。テキストファイルの通りにデータを読み込みたければ:

> dat <- matrix(scan("mydata.txt"), ncol=3, byrow=T)
Read 15 items
> dat
     [,1] [,2] [,3]
[1,]    1    6   11
[2,]    2    7   12
[3,]    3    8   13
[4,]    4    9   14
[5,]    5   10   15

としなければならない。また、これを利用してベクトルとして格納したければ:

> dat <- c(matrix(scan("mydata.txt"), ncol=3, byrow=T))
Read 15 items
> dat
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15

などとする工夫が必要になる。いずれにしても、sacan()はあまり使い勝手がよくないので、外部データを読み込む場合にはread.table()を利用した方がよいと思う。


方法2 read.table()を用いる

 先ほど用いたmydata.txtをread.table()で読み込むと次のようになる。

> dat <- read.table("mydata.txt")
> dat
  V1 V2 V3
1  1  6 11
2  2  7 12
3  3  8 13
4  4  9 14
5  5 10 15

 ただし、先頭行(テキストファイルの1行目)に変数のラベルが入力されているような場合がある。

--- mydata2.txt ---
X       Y       Z
1       6       11
2       7       12
3       8       13
4       9       14
5       10      15
-------------------

 このようなテキストファイルを読み込むときには、引数にheader=TRUEと指定しなければならない。

> dat <- read.table("mydata.txt", header=TRUE)
> dat
  X  Y  Z
1 1  6 11
2 2  7 12
3 3  8 13
4 4  9 14
5 5 10 15


方法3 excel.w()を用いる

 まず次のような関数を定義しておく。これはクリップボードに貼り付けられた(右クリックでコピーすると、そのデータはクリップボードという所へ一時的に保存されているのである)データをscan()を利用して読み込むような関数である。

excel.w <- function(nc){
   matrix(scan("clipboard"), byrow=TRUE, ncol=nc)
}

 例えば、以下のようなExcelワークシートの領域をコピーしたとしよう。

 この場合、選択した領域の列数は1なので、引数ncには1を指定すればよい。

> dat <- excel.w(1)
Read 8 items
> dat
     [,1]
[1,]    1
[2,]    6
[3,]   11
[4,]   16
[5,]   21
[6,]   26
[7,]   31
[8,]   36

 もしも、以下のように選択した領域が3であれば、引数には3と指定することになる。

> dat <- excel.w(3)
Read 24 items
> dat
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    6    7    8
[3,]   11   12   13
[4,]   16   17   18
[5,]   21   22   23
[6,]   26   27   28
[7,]   31   32   33
[8,]   36   37   38