データの読み込み
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