今回も,Rを利用したデータ解析の細かい話です。
Rで2つのカテゴリー変数のクロス集計表(それぞれの変数の値の組み合わせ度数を数えたもの)はtable関数簡単に求められます。
data <- data.frame(x = sample(1:5,100, replace = TRUE), y= sample(c("a","b","c"),100, replace = TRUE)) table(data)
簡単だけど,この出力はそれほど便利ではありません。罫線が引かれていないし,値をMSエクセルなどに転記して,表を作らなければ見た目があまりよくないと感じます。では,表としての見栄えを改善する方法はないでしょうか?
xtable関数はどうか?
xtableパッケージの中にあるxtable関数を使えば,表をtex形式やhtml形式で出力できます。
#xtableパッケージを未インストールならインストール intall.packages("xtable") #xtableパッケージの起動 library(xtable) #tex形式で出力するなら print(xtable(table(data)),type = "latex")
これで以下のような出力が得られます。
% latex table generated in R バージョン番号 by xtable バージョン番号 package
% 作成年月日
\begin{table}[ht]
\centering
\begin{tabular}{rrrr}
\hline
& a & b & c \\
\hline
1 & 7 & 9 & 8 \\
2 & 5 & 7 & 4 \\
3 & 8 & 6 & 7 \\
4 & 3 & 10 & 6 \\
5 & 9 & 8 & 3 \\
\hline
\end{tabular}
\end{table}
この出力はPCにtex環境がインストールされている必要があります。
print(xtable(table(data)),type = "html")
html形式で出力すると以下のようなタグ付きの出力が生成されます。はてなブログではhtmlなので表として表現されますね。
<!-- html table generated in R バージョン番号 by xtableバージョン番号 package --> <!-- Thu Dec 14 15:47:29 2017 --> <table border=1> <tr> <th> </th> <th> a </th> <th> b </th> <th> c </th> </tr> <tr> <td align="right"> 1 </td> <td align="right"> 7 </td> <td align="right"> 9 </td> <td align="right"> 8 </td> </tr> <tr> <td align="right"> 2 </td> <td align="right"> 5 </td> <td align="right"> 7 </td> <td align="right"> 4 </td> </tr> <tr> <td align="right"> 3 </td> <td align="right"> 8 </td> <td align="right"> 6 </td> <td align="right"> 7 </td> </tr> <tr> <td align="right"> 4 </td> <td align="right"> 3 </td> <td align="right"> 10 </td> <td align="right"> 6 </td> </tr> <tr> <td align="right"> 5 </td> <td align="right"> 9 </td> <td align="right"> 8 </td> <td align="right"> 3 </td> </tr> </table>
a | b | c | |
---|---|---|---|
1 | 7 | 9 | 8 |
2 | 5 | 7 | 4 |
3 | 8 | 6 | 7 |
4 | 3 | 10 | 6 |
5 | 9 | 8 | 3 |
これなら表貼り付けもできそうですね。
番外編:やっぱりエクセルを利用する
クロス集計表の計算自体はRにやらせて,結果をエクセルで読み込めば良いかもしれません。その場合は,以下のようにwrite.table関数を利用すると便利です。
write.table(table(data),"filename.txt", quote = FALSE, sep = ",")
これでできたfilename.txtをエクセルで読み込んだら,あとは罫線を引いて,幅を整えてできあがりです。
番外編その2: RStudioならrmd形式でマークダウンの表を使う
.rmd形式では|と-をつかって表を作成できます。
||a|b|c| |---|---|---|---| |1|7|9|8| |2|5|7|4| |3|8|6|7| |4|3|10|6| |5|9|8|3|
a | b | c | |
1 | 7 | 9 | 8 |
2 | 5 | 7 | 4 |
3 | 8 | 6 | 7 |
4 | 3 | 10 | 6 |
5 | 9 | 8 | 3 |