京橋のバイオインフォマティシャンの日常

まずは、データ分析、コマンドラインのメモとして

【Rのジミ〜な小技シリーズ】エクセルのセルをコピーして、クリップボードのまま、Rのread.tableでデータフレームとして直接読み込む時の方法

今までほぼやってなかったけど、さっき使ってみて思いの外便利だったので、今後はこれを使いたいと強いメッセージを込めて、これのみでメモっておく。

まずは、エクセルの任意のセルを選択して、command + c でコピーする。

Rを起動して、以下のコマンドを打てば*1クリップボードからデータのインポートができる。

ただし、途中で、command + c をもう一度打たないこと。癖で打ってしまいそうになる。。。

コピーしたセルがヘッダーを含む場合

Data <- read.table(pipe("pbpaste"), header=T, stringsAsFactors = F)
Data

# OR

Data <- read.table(pipe("pbpaste"), sep="\t", header=T, stringsAsFactors = F)
Data

コピーしたセルがヘッダーを含まない場合

Data <- read.table(pipe("pbpaste"), header=F, stringsAsFactors = F)
Data

# OR

Data <- read.table(pipe("pbpaste"), sep="\t", header=F, stringsAsFactors = F)
Data

追記(2020年6月10日)

実際に、クリップボードからR上にインポートして、データフレームをBlog用のマークダウンなどでテーブル出力するのをやってみた。

エクセルで、以下の画像のようにセルをcommand + c でコピーしてみる。

f:id:skume:20200610162314p:plain:w350

エクセルを閉じずに、そのまま、以下のRコードを実行する。

if(!require("knitr")){install.packages("knitr")}; library(knitr)

Data <- read.table(pipe("pbpaste"), header=T, stringsAsFactors = F)

Data
#  A B  C  D
#1 1 2  3  4
#2 1 3  5  7
#3 2 5  8 11
#4 3 6  9 12
#5 4 7 10 13

#マークダウン出力
kable(Data, format = "markdown")

#|  A|  B|  C|  D|
#|--:|--:|--:|--:|
#|  1|  2|  3|  4|
#|  1|  3|  5|  7|
#|  2|  5|  8| 11|
#|  3|  6|  9| 12|
#|  4|  7| 10| 13|

#Latex出力
kable(Data, format = "latex")

#\begin{tabular}{r|r|r|r}
#\hline
#A & B & C & D\\
#\hline
#1 & 2 & 3 & 4\\
#\hline
#1 & 3 & 5 & 7\\
#\hline
#2 & 5 & 8 & 11\\
#\hline
#3 & 6 & 9 & 12\\
#\hline
#4 & 7 & 10 & 13\\
#\hline
#\end{tabular}

#Pandoc出力
kable(Data, format = "pandoc")

#  A    B    C    D
#---  ---  ---  ---
#  1    2    3    4
#  1    3    5    7
#  2    5    8   11
#  3    6    9   12
#  4    7   10   13

参考資料

marcoghislanzoni.com

riseki.php.xdomain.jp

*1:R4.0以降は大丈夫だが、 stringsAsFactors = F は念のためいれておくこと