How to make beautiful table in R markdown

library(knitr)
d1 = head(iris)
d2 = head(mtcars)
# pipe tables by default
kable(d1)
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(d2[, 1:5])
mpg cyl disp hp drat
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)
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
# more padding
kable(d2, format = "pipe", padding = 2)
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
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
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
# 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 = "'"))
V1 V2 V3 V4 V5 V6
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
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
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
kables(list(kable(d1, align = "l"), kable(d2)), caption = "A tale of two tables")
A tale of two tables
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
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
LS0tDQp0aXRsZTogIk1ha2UgYmVhdXRpZnVsIHRhYmxlIHdpdGggZnVuY3Rpb24gaW4gUiINCmF1dGhvcjogImhlbnJ5IGRvIg0KZGF0ZTogIjIwMjMtMDctMDciDQpvdXRwdXQ6IA0KICBodG1sX2RvY3VtZW50Og0KICAgIGNvZGVfZG93bmxvYWQ6IHllcw0KICAgIGNvZGVfZm9sZGluZzogc2hvdw0KICAgIHRvYzogeWVzDQogICAgdG9jX2Zsb2F0OiBubw0KICB3b3JkX2RvY3VtZW50Og0KICAgIHRvYzogeWVzDQotLS0NCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUsIHdhcm5pbmcgPSBGQUxTRSwgbWVzc2FnZSA9IEZBTFNFKQ0KYGBgDQoNCg0KSG93IHRvIG1ha2UgYmVhdXRpZnVsIHRhYmxlIGluIFIgbWFya2Rvd24NCg0KYGBge3J9DQpsaWJyYXJ5KGtuaXRyKQ0KYGBgDQoNCmBgYHtyfQ0KZDEgPSBoZWFkKGlyaXMpDQpkMiA9IGhlYWQobXRjYXJzKQ0KIyBwaXBlIHRhYmxlcyBieSBkZWZhdWx0DQprYWJsZShkMSkNCmthYmxlKGQyWywgMTo1XSkNCiMgbm8gaW5uZXIgcGFkZGluZw0Ka2FibGUoZDIsIGZvcm1hdCA9ICJwaXBlIiwgcGFkZGluZyA9IDApDQojIG1vcmUgcGFkZGluZw0Ka2FibGUoZDIsIGZvcm1hdCA9ICJwaXBlIiwgcGFkZGluZyA9IDIpDQprYWJsZShkMSwgZm9ybWF0ID0gImxhdGV4IikNCmthYmxlKGQxLCBmb3JtYXQgPSAiaHRtbCIpDQprYWJsZShkMSwgZm9ybWF0ID0gImxhdGV4IiwgY2FwdGlvbiA9ICJUaXRsZSBvZiB0aGUgdGFibGUiKQ0Ka2FibGUoZDEsIGZvcm1hdCA9ICJodG1sIiwgY2FwdGlvbiA9ICJUaXRsZSBvZiB0aGUgdGFibGUiKQ0KIyB1c2UgdGhlIGJvb2t0YWJzIHBhY2thZ2UNCmthYmxlKG10Y2FycywgZm9ybWF0ID0gImxhdGV4IiwgYm9va3RhYnMgPSBUUlVFKQ0KIyB1c2UgdGhlIGxvbmd0YWJsZSBwYWNrYWdlDQprYWJsZShtYXRyaXgoMTAwMCwgbmNvbCA9IDUpLCBmb3JtYXQgPSAibGF0ZXgiLCBkaWdpdHMgPSAyLCBsb25ndGFibGUgPSBUUlVFKQ0KIyBjaGFuZ2UgTGFUZVggZGVmYXVsdCB0YWJsZSBlbnZpcm9ubWVudA0Ka2FibGUoZDEsIGZvcm1hdCA9ICJsYXRleCIsIGNhcHRpb24gPSAiTXkgdGFibGUiLCB0YWJsZS5lbnZpciA9ICJ0YWJsZSoiKQ0KIyBhZGQgc29tZSB0YWJsZSBhdHRyaWJ1dGVzDQprYWJsZShkMSwgZm9ybWF0ID0gImh0bWwiLCB0YWJsZS5hdHRyID0gImlkPVwibXl0YWJsZVwiIikNCiMgcmVTVCBvdXRwdXQNCmthYmxlKGQyLCBmb3JtYXQgPSAicnN0IikNCiMgbm8gcm93IG5hbWVzDQprYWJsZShkMiwgZm9ybWF0ID0gInJzdCIsIHJvdy5uYW1lcyA9IEZBTFNFKQ0KIyBQYW5kb2Mgc2ltcGxlIHRhYmxlcw0Ka2FibGUoZDIsIGZvcm1hdCA9ICJzaW1wbGUiLCBjYXB0aW9uID0gIlRpdGxlIG9mIHRoZSB0YWJsZSIpDQojIGZvcm1hdCBudW1iZXJzIHVzaW5nICwgYXMgZGVjaW1hbCBwb2ludCwgYW5kICcgYXMgdGhvdXNhbmRzIHNlcGFyYXRvcg0KeCA9IGFzLmRhdGEuZnJhbWUobWF0cml4KHJub3JtKDYwLCAxZSswNiwgMTAwMDApLCAxMCkpDQprYWJsZSh4LCBmb3JtYXQuYXJncyA9IGxpc3QoZGVjaW1hbC5tYXJrID0gIiwiLCBiaWcubWFyayA9ICInIikpDQojIHNhdmUgdGhlIHZhbHVlDQp4ID0ga2FibGUoZDIsIGZvcm1hdCA9ICJodG1sIikNCmNhdCh4LCBzZXAgPSAiXG4iKQ0KIyBjYW4gYWxzbyBzZXQgb3B0aW9ucyhrbml0ci50YWJsZS5mb3JtYXQgPSAnaHRtbCcpIHNvIHRoYXQgdGhlIG91dHB1dCBpcyBIVE1MDQoNCiMgbXVsdGlwbGUgdGFibGVzIHZpYSBlaXRoZXIga2FibGUobGlzdCh4MSwgeDIpKSBvciBrYWJsZXMobGlzdChrYWJsZSh4MSksDQojIGthYmxlKHgyKSkpDQprYWJsZShsaXN0KGQxLCBkMiksIGNhcHRpb24gPSAiQSB0YWxlIG9mIHR3byB0YWJsZXMiKQ0Ka2FibGVzKGxpc3Qoa2FibGUoZDEsIGFsaWduID0gImwiKSwga2FibGUoZDIpKSwgY2FwdGlvbiA9ICJBIHRhbGUgb2YgdHdvIHRhYmxlcyIpDQpgYGANCg0K