Excel等のデータをサクっとRに持って来る方法

お客さんから飛んできたExcelのデータをちょいとだけ捌きたい、例えば送られてきたそのデータをもとにヒストグラムを見てみたい、あるいはC++で書いたモンテカルロの結果をファイルに吐き出したのでその分布を見てみたい、統計量を計算したいけどExcelには荷が重い・・・そんな状況を考える。

そういう状況において一番億劫になるのはExcel⇔R間のデータのやりとりで、いちいちcsv保存してファイルから読むのはめんどくさいし、XLConnectを使うのもなんだかなと思ってたのですが、クリップボード経由でデータを引っ張ってこれることに気がついた。

まずはExcelに以下のようにデータが入っているとして、それをコピー(Ctrl + C)して「コピーしている状態」にした後、

Rのコンソール or スクリプト

read.table('clipboard')

とすると・・・

> x <- read.table('clipboard')
> x
           V1          V2          V3
1 -0.07402226  0.45643754 -0.19322021
2  0.35599156  0.29323635 -0.39909230
3  0.35595408 -0.09060293  0.34308878
4 -0.39859748 -0.14684906  0.09709876
5 -0.47807353  0.30316138  0.13201765
6 -0.09717907 -0.30437429 -0.36920012
7 -0.49815285 -0.03643053  0.33587136
8 -0.21327220  0.11758934  0.11416188
9 -0.39345176 -0.34772462  0.48158153

とデータを読み込めます。結果はdata.frame(データフレーム)型として返却されてきます。

元のデータにヘッダがある場合、たとえば以下のようにデータが入ってるとして、また該当範囲全体をコピー(Ctrl + C)して「コピーしている状態」にした後、

またRのコンソール or スクリプト

read.table('clipboard', header = TRUE)

とすると・・・

> x <- read.table('clipboard', header = TRUE)
> x
            X           Y           Z
1 -0.07402226  0.45643754 -0.19322021
2  0.35599156  0.29323635 -0.39909230
3  0.35595408 -0.09060293  0.34308878
4 -0.39859748 -0.14684906  0.09709876
5 -0.47807353  0.30316138  0.13201765
6 -0.09717907 -0.30437429 -0.36920012
7 -0.49815285 -0.03643053  0.33587136
8 -0.21327220  0.11758934  0.11416188
9 -0.39345176 -0.34772462  0.48158153

と、ヘッダ付きのデータフレームとしてR側にデータを持ってこれますよと。その他read.table関数のオプションを組み合わせれば、各列の”データ型”の調整等もできるので便利便利。Rに載せてしまえばあとはヒストグラム作るのも簡単だし、いちいちセル数式を伸ばすという苦行もなくなるので快適快適、Rを高機能関数電卓のようにも使えますよというそんなお話でした。