How to make beautiful table in R markdown
library(knitr)
d1 = head(iris)
d2 = head(mtcars)
# pipe tables by default
kable(d1)
5.1 |
3.5 |
1.4 |
0.2 |
setosa |
4.9 |
3.0 |
1.4 |
0.2 |
setosa |
4.7 |
3.2 |
1.3 |
0.2 |
setosa |
4.6 |
3.1 |
1.5 |
0.2 |
setosa |
5.0 |
3.6 |
1.4 |
0.2 |
setosa |
5.4 |
3.9 |
1.7 |
0.4 |
setosa |
kable(d2[, 1:5])
Mazda RX4 |
21.0 |
6 |
160 |
110 |
3.90 |
Mazda RX4 Wag |
21.0 |
6 |
160 |
110 |
3.90 |
Datsun 710 |
22.8 |
4 |
108 |
93 |
3.85 |
Hornet 4 Drive |
21.4 |
6 |
258 |
110 |
3.08 |
Hornet Sportabout |
18.7 |
8 |
360 |
175 |
3.15 |
Valiant |
18.1 |
6 |
225 |
105 |
2.76 |
# no inner padding
kable(d2, format = "pipe", padding = 0)
Mazda RX4 |
21.0 |
6 |
160 |
110 |
3.90 |
2.620 |
16.46 |
0 |
1 |
4 |
4 |
Mazda RX4 Wag |
21.0 |
6 |
160 |
110 |
3.90 |
2.875 |
17.02 |
0 |
1 |
4 |
4 |
Datsun 710 |
22.8 |
4 |
108 |
93 |
3.85 |
2.320 |
18.61 |
1 |
1 |
4 |
1 |
Hornet 4 Drive |
21.4 |
6 |
258 |
110 |
3.08 |
3.215 |
19.44 |
1 |
0 |
3 |
1 |
Hornet Sportabout |
18.7 |
8 |
360 |
175 |
3.15 |
3.440 |
17.02 |
0 |
0 |
3 |
2 |
Valiant |
18.1 |
6 |
225 |
105 |
2.76 |
3.460 |
20.22 |
1 |
0 |
3 |
1 |
# more padding
kable(d2, format = "pipe", padding = 2)
Mazda RX4 |
21.0 |
6 |
160 |
110 |
3.90 |
2.620 |
16.46 |
0 |
1 |
4 |
4 |
Mazda RX4 Wag |
21.0 |
6 |
160 |
110 |
3.90 |
2.875 |
17.02 |
0 |
1 |
4 |
4 |
Datsun 710 |
22.8 |
4 |
108 |
93 |
3.85 |
2.320 |
18.61 |
1 |
1 |
4 |
1 |
Hornet 4 Drive |
21.4 |
6 |
258 |
110 |
3.08 |
3.215 |
19.44 |
1 |
0 |
3 |
1 |
Hornet Sportabout |
18.7 |
8 |
360 |
175 |
3.15 |
3.440 |
17.02 |
0 |
0 |
3 |
2 |
Valiant |
18.1 |
6 |
225 |
105 |
2.76 |
3.460 |
20.22 |
1 |
0 |
3 |
1 |
kable(d1, format = "latex")
kable(d1, format = "html")
Sepal.Length
|
Sepal.Width
|
Petal.Length
|
Petal.Width
|
Species
|
5.1
|
3.5
|
1.4
|
0.2
|
setosa
|
4.9
|
3.0
|
1.4
|
0.2
|
setosa
|
4.7
|
3.2
|
1.3
|
0.2
|
setosa
|
4.6
|
3.1
|
1.5
|
0.2
|
setosa
|
5.0
|
3.6
|
1.4
|
0.2
|
setosa
|
5.4
|
3.9
|
1.7
|
0.4
|
setosa
|
kable(d1, format = "latex", caption = "Title of the table")
kable(d1, format = "html", caption = "Title of the table")
Title of the table
Sepal.Length
|
Sepal.Width
|
Petal.Length
|
Petal.Width
|
Species
|
5.1
|
3.5
|
1.4
|
0.2
|
setosa
|
4.9
|
3.0
|
1.4
|
0.2
|
setosa
|
4.7
|
3.2
|
1.3
|
0.2
|
setosa
|
4.6
|
3.1
|
1.5
|
0.2
|
setosa
|
5.0
|
3.6
|
1.4
|
0.2
|
setosa
|
5.4
|
3.9
|
1.7
|
0.4
|
setosa
|
# use the booktabs package
kable(mtcars, format = "latex", booktabs = TRUE)
# use the longtable package
kable(matrix(1000, ncol = 5), format = "latex", digits = 2, longtable = TRUE)
# change LaTeX default table environment
kable(d1, format = "latex", caption = "My table", table.envir = "table*")
# add some table attributes
kable(d1, format = "html", table.attr = "id=\"mytable\"")
Sepal.Length
|
Sepal.Width
|
Petal.Length
|
Petal.Width
|
Species
|
5.1
|
3.5
|
1.4
|
0.2
|
setosa
|
4.9
|
3.0
|
1.4
|
0.2
|
setosa
|
4.7
|
3.2
|
1.3
|
0.2
|
setosa
|
4.6
|
3.1
|
1.5
|
0.2
|
setosa
|
5.0
|
3.6
|
1.4
|
0.2
|
setosa
|
5.4
|
3.9
|
1.7
|
0.4
|
setosa
|
# reST output
kable(d2, format = "rst")
================= ==== === ==== === ==== ===== ===== === === ====
==== mpg cyl disp hp drat wt qsec vs am gear carb =================
==== === ==== === ==== ===== ===== === === ==== ==== Mazda RX4 21.0 6
160 110 3.90 2.620 16.46 0 1 4 4 Mazda RX4 Wag 21.0 6 160 110 3.90 2.875
17.02 0 1 4 4 Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 Hornet 4
Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1 Hornet Sportabout 18.7 8
360 175 3.15 3.440 17.02 0 0 3 2 Valiant 18.1 6 225 105 2.76 3.460 20.22
1 0 3 1 ================= ==== === ==== === ==== ===== ===== === ===
==== ====
# no row names
kable(d2, format = "rst", row.names = FALSE)
==== === ==== === ==== ===== ===== === === ==== ==== mpg cyl disp hp
drat wt qsec vs am gear carb ==== === ==== === ==== ===== ===== === ===
==== ==== 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 21.0 6 160 110 3.90
2.875 17.02 0 1 4 4 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 21.4 6 258
110 3.08 3.215 19.44 1 0 3 1 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
18.1 6 225 105 2.76 3.460 20.22 1 0 3 1 ==== === ==== === ==== =====
===== === === ==== ====
# Pandoc simple tables
kable(d2, format = "simple", caption = "Title of the table")
Title of the table
Mazda RX4 |
21.0 |
6 |
160 |
110 |
3.90 |
2.620 |
16.46 |
0 |
1 |
4 |
4 |
Mazda RX4 Wag |
21.0 |
6 |
160 |
110 |
3.90 |
2.875 |
17.02 |
0 |
1 |
4 |
4 |
Datsun 710 |
22.8 |
4 |
108 |
93 |
3.85 |
2.320 |
18.61 |
1 |
1 |
4 |
1 |
Hornet 4 Drive |
21.4 |
6 |
258 |
110 |
3.08 |
3.215 |
19.44 |
1 |
0 |
3 |
1 |
Hornet Sportabout |
18.7 |
8 |
360 |
175 |
3.15 |
3.440 |
17.02 |
0 |
0 |
3 |
2 |
Valiant |
18.1 |
6 |
225 |
105 |
2.76 |
3.460 |
20.22 |
1 |
0 |
3 |
1 |
# format numbers using , as decimal point, and ' as thousands separator
x = as.data.frame(matrix(rnorm(60, 1e+06, 10000), 10))
kable(x, format.args = list(decimal.mark = ",", big.mark = "'"))
1’010’315,4 |
990’161,5 |
1’015’864,1 |
1’002’734,3 |
995’609,7 |
988’555,0 |
1’006’651,3 |
1’012’552,0 |
1’001’657,6 |
1’013’501,5 |
1’007’153,5 |
990’427,1 |
1’002’583,6 |
987’797,8 |
987’831,0 |
992’387,2 |
1’005’867,4 |
1’002’812,1 |
992’089,3 |
1’001’607,4 |
1’006’679,8 |
1’001’374,8 |
1’005’434,4 |
1’002’227,0 |
1’012’465,1 |
1’027’855,8 |
994’686,5 |
999’316,5 |
992’122,3 |
1’017’498,2 |
993’265,6 |
997’481,8 |
981’986,3 |
992’652,5 |
1’002’430,9 |
999’566,0 |
1’005’726,1 |
994’500,0 |
1’011’197,7 |
1’006’487,0 |
988’517,1 |
985’308,0 |
1’007’102,6 |
994’019,8 |
998’370,3 |
992’128,6 |
993’125,6 |
1’017’725,5 |
985’703,7 |
1’005’931,9 |
1’008’540,7 |
990’149,4 |
990’697,4 |
982’917,2 |
988’459,4 |
1’004’531,4 |
1’003’773,8 |
1’000’658,7 |
1’019’793,2 |
1’022’136,8 |
# save the value
x = kable(d2, format = "html")
cat(x, sep = "\n")
## <table>
## <thead>
## <tr>
## <th style="text-align:left;"> </th>
## <th style="text-align:right;"> mpg </th>
## <th style="text-align:right;"> cyl </th>
## <th style="text-align:right;"> disp </th>
## <th style="text-align:right;"> hp </th>
## <th style="text-align:right;"> drat </th>
## <th style="text-align:right;"> wt </th>
## <th style="text-align:right;"> qsec </th>
## <th style="text-align:right;"> vs </th>
## <th style="text-align:right;"> am </th>
## <th style="text-align:right;"> gear </th>
## <th style="text-align:right;"> carb </th>
## </tr>
## </thead>
## <tbody>
## <tr>
## <td style="text-align:left;"> Mazda RX4 </td>
## <td style="text-align:right;"> 21.0 </td>
## <td style="text-align:right;"> 6 </td>
## <td style="text-align:right;"> 160 </td>
## <td style="text-align:right;"> 110 </td>
## <td style="text-align:right;"> 3.90 </td>
## <td style="text-align:right;"> 2.620 </td>
## <td style="text-align:right;"> 16.46 </td>
## <td style="text-align:right;"> 0 </td>
## <td style="text-align:right;"> 1 </td>
## <td style="text-align:right;"> 4 </td>
## <td style="text-align:right;"> 4 </td>
## </tr>
## <tr>
## <td style="text-align:left;"> Mazda RX4 Wag </td>
## <td style="text-align:right;"> 21.0 </td>
## <td style="text-align:right;"> 6 </td>
## <td style="text-align:right;"> 160 </td>
## <td style="text-align:right;"> 110 </td>
## <td style="text-align:right;"> 3.90 </td>
## <td style="text-align:right;"> 2.875 </td>
## <td style="text-align:right;"> 17.02 </td>
## <td style="text-align:right;"> 0 </td>
## <td style="text-align:right;"> 1 </td>
## <td style="text-align:right;"> 4 </td>
## <td style="text-align:right;"> 4 </td>
## </tr>
## <tr>
## <td style="text-align:left;"> Datsun 710 </td>
## <td style="text-align:right;"> 22.8 </td>
## <td style="text-align:right;"> 4 </td>
## <td style="text-align:right;"> 108 </td>
## <td style="text-align:right;"> 93 </td>
## <td style="text-align:right;"> 3.85 </td>
## <td style="text-align:right;"> 2.320 </td>
## <td style="text-align:right;"> 18.61 </td>
## <td style="text-align:right;"> 1 </td>
## <td style="text-align:right;"> 1 </td>
## <td style="text-align:right;"> 4 </td>
## <td style="text-align:right;"> 1 </td>
## </tr>
## <tr>
## <td style="text-align:left;"> Hornet 4 Drive </td>
## <td style="text-align:right;"> 21.4 </td>
## <td style="text-align:right;"> 6 </td>
## <td style="text-align:right;"> 258 </td>
## <td style="text-align:right;"> 110 </td>
## <td style="text-align:right;"> 3.08 </td>
## <td style="text-align:right;"> 3.215 </td>
## <td style="text-align:right;"> 19.44 </td>
## <td style="text-align:right;"> 1 </td>
## <td style="text-align:right;"> 0 </td>
## <td style="text-align:right;"> 3 </td>
## <td style="text-align:right;"> 1 </td>
## </tr>
## <tr>
## <td style="text-align:left;"> Hornet Sportabout </td>
## <td style="text-align:right;"> 18.7 </td>
## <td style="text-align:right;"> 8 </td>
## <td style="text-align:right;"> 360 </td>
## <td style="text-align:right;"> 175 </td>
## <td style="text-align:right;"> 3.15 </td>
## <td style="text-align:right;"> 3.440 </td>
## <td style="text-align:right;"> 17.02 </td>
## <td style="text-align:right;"> 0 </td>
## <td style="text-align:right;"> 0 </td>
## <td style="text-align:right;"> 3 </td>
## <td style="text-align:right;"> 2 </td>
## </tr>
## <tr>
## <td style="text-align:left;"> Valiant </td>
## <td style="text-align:right;"> 18.1 </td>
## <td style="text-align:right;"> 6 </td>
## <td style="text-align:right;"> 225 </td>
## <td style="text-align:right;"> 105 </td>
## <td style="text-align:right;"> 2.76 </td>
## <td style="text-align:right;"> 3.460 </td>
## <td style="text-align:right;"> 20.22 </td>
## <td style="text-align:right;"> 1 </td>
## <td style="text-align:right;"> 0 </td>
## <td style="text-align:right;"> 3 </td>
## <td style="text-align:right;"> 1 </td>
## </tr>
## </tbody>
## </table>
# can also set options(knitr.table.format = 'html') so that the output is HTML
# multiple tables via either kable(list(x1, x2)) or kables(list(kable(x1),
# kable(x2)))
kable(list(d1, d2), caption = "A tale of two tables")
A tale of two tables
5.1 |
3.5 |
1.4 |
0.2 |
setosa |
4.9 |
3.0 |
1.4 |
0.2 |
setosa |
4.7 |
3.2 |
1.3 |
0.2 |
setosa |
4.6 |
3.1 |
1.5 |
0.2 |
setosa |
5.0 |
3.6 |
1.4 |
0.2 |
setosa |
5.4 |
3.9 |
1.7 |
0.4 |
setosa |
|
Mazda RX4 |
21.0 |
6 |
160 |
110 |
3.90 |
2.620 |
16.46 |
0 |
1 |
4 |
4 |
Mazda RX4 Wag |
21.0 |
6 |
160 |
110 |
3.90 |
2.875 |
17.02 |
0 |
1 |
4 |
4 |
Datsun 710 |
22.8 |
4 |
108 |
93 |
3.85 |
2.320 |
18.61 |
1 |
1 |
4 |
1 |
Hornet 4 Drive |
21.4 |
6 |
258 |
110 |
3.08 |
3.215 |
19.44 |
1 |
0 |
3 |
1 |
Hornet Sportabout |
18.7 |
8 |
360 |
175 |
3.15 |
3.440 |
17.02 |
0 |
0 |
3 |
2 |
Valiant |
18.1 |
6 |
225 |
105 |
2.76 |
3.460 |
20.22 |
1 |
0 |
3 |
1 |
|
kables(list(kable(d1, align = "l"), kable(d2)), caption = "A tale of two tables")
A tale of two tables
5.1 |
3.5 |
1.4 |
0.2 |
setosa |
4.9 |
3.0 |
1.4 |
0.2 |
setosa |
4.7 |
3.2 |
1.3 |
0.2 |
setosa |
4.6 |
3.1 |
1.5 |
0.2 |
setosa |
5.0 |
3.6 |
1.4 |
0.2 |
setosa |
5.4 |
3.9 |
1.7 |
0.4 |
setosa |
|
Mazda RX4 |
21.0 |
6 |
160 |
110 |
3.90 |
2.620 |
16.46 |
0 |
1 |
4 |
4 |
Mazda RX4 Wag |
21.0 |
6 |
160 |
110 |
3.90 |
2.875 |
17.02 |
0 |
1 |
4 |
4 |
Datsun 710 |
22.8 |
4 |
108 |
93 |
3.85 |
2.320 |
18.61 |
1 |
1 |
4 |
1 |
Hornet 4 Drive |
21.4 |
6 |
258 |
110 |
3.08 |
3.215 |
19.44 |
1 |
0 |
3 |
1 |
Hornet Sportabout |
18.7 |
8 |
360 |
175 |
3.15 |
3.440 |
17.02 |
0 |
0 |
3 |
2 |
Valiant |
18.1 |
6 |
225 |
105 |
2.76 |
3.460 |
20.22 |
1 |
0 |
3 |
1 |
|
LS0tDQp0aXRsZTogIk1ha2UgYmVhdXRpZnVsIHRhYmxlIHdpdGggZnVuY3Rpb24gaW4gUiINCmF1dGhvcjogImhlbnJ5IGRvIg0KZGF0ZTogIjIwMjMtMDctMDciDQpvdXRwdXQ6IA0KICBodG1sX2RvY3VtZW50Og0KICAgIGNvZGVfZG93bmxvYWQ6IHllcw0KICAgIGNvZGVfZm9sZGluZzogc2hvdw0KICAgIHRvYzogeWVzDQogICAgdG9jX2Zsb2F0OiBubw0KICB3b3JkX2RvY3VtZW50Og0KICAgIHRvYzogeWVzDQotLS0NCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUsIHdhcm5pbmcgPSBGQUxTRSwgbWVzc2FnZSA9IEZBTFNFKQ0KYGBgDQoNCg0KSG93IHRvIG1ha2UgYmVhdXRpZnVsIHRhYmxlIGluIFIgbWFya2Rvd24NCg0KYGBge3J9DQpsaWJyYXJ5KGtuaXRyKQ0KYGBgDQoNCmBgYHtyfQ0KZDEgPSBoZWFkKGlyaXMpDQpkMiA9IGhlYWQobXRjYXJzKQ0KIyBwaXBlIHRhYmxlcyBieSBkZWZhdWx0DQprYWJsZShkMSkNCmthYmxlKGQyWywgMTo1XSkNCiMgbm8gaW5uZXIgcGFkZGluZw0Ka2FibGUoZDIsIGZvcm1hdCA9ICJwaXBlIiwgcGFkZGluZyA9IDApDQojIG1vcmUgcGFkZGluZw0Ka2FibGUoZDIsIGZvcm1hdCA9ICJwaXBlIiwgcGFkZGluZyA9IDIpDQprYWJsZShkMSwgZm9ybWF0ID0gImxhdGV4IikNCmthYmxlKGQxLCBmb3JtYXQgPSAiaHRtbCIpDQprYWJsZShkMSwgZm9ybWF0ID0gImxhdGV4IiwgY2FwdGlvbiA9ICJUaXRsZSBvZiB0aGUgdGFibGUiKQ0Ka2FibGUoZDEsIGZvcm1hdCA9ICJodG1sIiwgY2FwdGlvbiA9ICJUaXRsZSBvZiB0aGUgdGFibGUiKQ0KIyB1c2UgdGhlIGJvb2t0YWJzIHBhY2thZ2UNCmthYmxlKG10Y2FycywgZm9ybWF0ID0gImxhdGV4IiwgYm9va3RhYnMgPSBUUlVFKQ0KIyB1c2UgdGhlIGxvbmd0YWJsZSBwYWNrYWdlDQprYWJsZShtYXRyaXgoMTAwMCwgbmNvbCA9IDUpLCBmb3JtYXQgPSAibGF0ZXgiLCBkaWdpdHMgPSAyLCBsb25ndGFibGUgPSBUUlVFKQ0KIyBjaGFuZ2UgTGFUZVggZGVmYXVsdCB0YWJsZSBlbnZpcm9ubWVudA0Ka2FibGUoZDEsIGZvcm1hdCA9ICJsYXRleCIsIGNhcHRpb24gPSAiTXkgdGFibGUiLCB0YWJsZS5lbnZpciA9ICJ0YWJsZSoiKQ0KIyBhZGQgc29tZSB0YWJsZSBhdHRyaWJ1dGVzDQprYWJsZShkMSwgZm9ybWF0ID0gImh0bWwiLCB0YWJsZS5hdHRyID0gImlkPVwibXl0YWJsZVwiIikNCiMgcmVTVCBvdXRwdXQNCmthYmxlKGQyLCBmb3JtYXQgPSAicnN0IikNCiMgbm8gcm93IG5hbWVzDQprYWJsZShkMiwgZm9ybWF0ID0gInJzdCIsIHJvdy5uYW1lcyA9IEZBTFNFKQ0KIyBQYW5kb2Mgc2ltcGxlIHRhYmxlcw0Ka2FibGUoZDIsIGZvcm1hdCA9ICJzaW1wbGUiLCBjYXB0aW9uID0gIlRpdGxlIG9mIHRoZSB0YWJsZSIpDQojIGZvcm1hdCBudW1iZXJzIHVzaW5nICwgYXMgZGVjaW1hbCBwb2ludCwgYW5kICcgYXMgdGhvdXNhbmRzIHNlcGFyYXRvcg0KeCA9IGFzLmRhdGEuZnJhbWUobWF0cml4KHJub3JtKDYwLCAxZSswNiwgMTAwMDApLCAxMCkpDQprYWJsZSh4LCBmb3JtYXQuYXJncyA9IGxpc3QoZGVjaW1hbC5tYXJrID0gIiwiLCBiaWcubWFyayA9ICInIikpDQojIHNhdmUgdGhlIHZhbHVlDQp4ID0ga2FibGUoZDIsIGZvcm1hdCA9ICJodG1sIikNCmNhdCh4LCBzZXAgPSAiXG4iKQ0KIyBjYW4gYWxzbyBzZXQgb3B0aW9ucyhrbml0ci50YWJsZS5mb3JtYXQgPSAnaHRtbCcpIHNvIHRoYXQgdGhlIG91dHB1dCBpcyBIVE1MDQoNCiMgbXVsdGlwbGUgdGFibGVzIHZpYSBlaXRoZXIga2FibGUobGlzdCh4MSwgeDIpKSBvciBrYWJsZXMobGlzdChrYWJsZSh4MSksDQojIGthYmxlKHgyKSkpDQprYWJsZShsaXN0KGQxLCBkMiksIGNhcHRpb24gPSAiQSB0YWxlIG9mIHR3byB0YWJsZXMiKQ0Ka2FibGVzKGxpc3Qoa2FibGUoZDEsIGFsaWduID0gImwiKSwga2FibGUoZDIpKSwgY2FwdGlvbiA9ICJBIHRhbGUgb2YgdHdvIHRhYmxlcyIpDQpgYGANCg0K