論理の流刑地

地獄の底を、爆笑しながら闊歩する

【小ネタ】Rでclipboard利用 in Windows

備忘用。わりかし実用的だが忘れがちな小ネタ。
Macだと若干やり方が違うので注意(という自分用備忘)

Motivation

Rでデータフレームをつくって、それをExcelにのせたいときがある。
また、Excelやブラウザ*1上でコピーしたtableをそのままdata frameとして使いたい時がある。

そんなとき、お手軽なのがクリップボードを使うことである。

参考記事

How to

Rのデータフレームをクリップボード

write.table(test_data,file="clipboard-16384",sep="\t",fileEncoding = "CP932")

やりかたは簡単。write.tableの引数fileに"clipboard"を指定するだけ。
ただし、自分は以前の記事で書いたようにデフォルトの文字コードUTF-8にしているので例えばExcelに移す時に文字化けが発生しがち。
したがって、fileEncoding="CP932"を利用することで文字化けを回避している(参考URL)。

また、データフレームの容量によっては"clipboard buffer is full and output lost"というおぞましいErrorが出る(とくに文字を含んだときに顕著)。
これを回避するためには、引数fileに"clipboard"ではなく"clipboard-16384"と指定する(参考URL)。
16384は上限ってだけでそれ以下ならばよい。

クリップボードからRのデータフレームへ

まぁ対象はなんでもいいんだけど、ブラウザからのほうが便利さ&目新しさはあると思うので、
とりあえず藤井七段の対局結果のページから、「最近の対局結果」のテーブルをコピーした前提で話をすすめる。

コードは以下の通りだ。このWebページはUTF-8に設定されているようだがなぜかfileEncoding="CP932"じゃないとエラーを吐く。理由はわからない。

rdf <- read.table(file="clipboard-15000", header=T, sep="\t",fileEncoding = "CP932")

すると、綺麗に元のテーブルがdata.frame化されている。

f:id:ronri_rukeichi:20190625122953p:plain

Enjoy!!

*1:時間があるときは再現性の問題を含めてもExcelのほうはread.csvなどでやるのが王道だと思うが、このブラウザコピーのほうは割と有用だと思う。スクレイピングのコードは結構書くのに時間がかかるし。