第 7 章 kableExtra包画图
记录一些自己可能会常用的表格,至于更多的可以参考大佬们写的教程,真的很酷。
library(kableExtra)
7.1 生成html表格
<- mtcars[1:5, 1:6]
dt
kable(dt, "html")
mpg | cyl | disp | hp | drat | wt | |
---|---|---|---|---|---|---|
Mazda RX4 | 21.0 | 6 | 160 | 110 | 3.90 | 2.620 |
Mazda RX4 Wag | 21.0 | 6 | 160 | 110 | 3.90 | 2.875 |
Datsun 710 | 22.8 | 4 | 108 | 93 | 3.85 | 2.320 |
Hornet 4 Drive | 21.4 | 6 | 258 | 110 | 3.08 | 3.215 |
Hornet Sportabout | 18.7 | 8 | 360 | 175 | 3.15 | 3.440 |
7.2 渲染表格
# bootstrap是个开源的CSS库,可以用来很方便地美化HTML页面。
%>%
dt kable("html") %>%
kable_styling()
mpg | cyl | disp | hp | drat | wt | |
---|---|---|---|---|---|---|
Mazda RX4 | 21.0 | 6 | 160 | 110 | 3.90 | 2.620 |
Mazda RX4 Wag | 21.0 | 6 | 160 | 110 | 3.90 | 2.875 |
Datsun 710 | 22.8 | 4 | 108 | 93 | 3.85 | 2.320 |
Hornet 4 Drive | 21.4 | 6 | 258 | 110 | 3.08 | 3.215 |
Hornet Sportabout | 18.7 | 8 | 360 | 175 | 3.15 | 3.440 |
- 其他风格
- striped
- bordered
- hover
- condensed
- responsive
# 给表格加上斑马纹和悬浮效果
kable(dt, "html") %>%
kable_styling(bootstrap_options = c("striped", "hover"))
mpg | cyl | disp | hp | drat | wt | |
---|---|---|---|---|---|---|
Mazda RX4 | 21.0 | 6 | 160 | 110 | 3.90 | 2.620 |
Mazda RX4 Wag | 21.0 | 6 | 160 | 110 | 3.90 | 2.875 |
Datsun 710 | 22.8 | 4 | 108 | 93 | 3.85 | 2.320 |
Hornet 4 Drive | 21.4 | 6 | 258 | 110 | 3.08 | 3.215 |
Hornet Sportabout | 18.7 | 8 | 360 | 175 | 3.15 | 3.440 |
# 让内容显得更紧凑
kable(dt, "html") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"))
mpg | cyl | disp | hp | drat | wt | |
---|---|---|---|---|---|---|
Mazda RX4 | 21.0 | 6 | 160 | 110 | 3.90 | 2.620 |
Mazda RX4 Wag | 21.0 | 6 | 160 | 110 | 3.90 | 2.875 |
Datsun 710 | 22.8 | 4 | 108 | 93 | 3.85 | 2.320 |
Hornet 4 Drive | 21.4 | 6 | 258 | 110 | 3.08 | 3.215 |
Hornet Sportabout | 18.7 | 8 | 360 | 175 | 3.15 | 3.440 |
# 让表格样式随屏幕宽度变化,更适合手机屏。
kable(dt, "html") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"))
mpg | cyl | disp | hp | drat | wt | |
---|---|---|---|---|---|---|
Mazda RX4 | 21.0 | 6 | 160 | 110 | 3.90 | 2.620 |
Mazda RX4 Wag | 21.0 | 6 | 160 | 110 | 3.90 | 2.875 |
Datsun 710 | 22.8 | 4 | 108 | 93 | 3.85 | 2.320 |
Hornet 4 Drive | 21.4 | 6 | 258 | 110 | 3.08 | 3.215 |
Hornet Sportabout | 18.7 | 8 | 360 | 175 | 3.15 | 3.440 |
# 控制表格的宽度
kable(dt, "html") %>%
kable_styling(bootstrap_options = "striped", full_width = F)
mpg | cyl | disp | hp | drat | wt | |
---|---|---|---|---|---|---|
Mazda RX4 | 21.0 | 6 | 160 | 110 | 3.90 | 2.620 |
Mazda RX4 Wag | 21.0 | 6 | 160 | 110 | 3.90 | 2.875 |
Datsun 710 | 22.8 | 4 | 108 | 93 | 3.85 | 2.320 |
Hornet 4 Drive | 21.4 | 6 | 258 | 110 | 3.08 | 3.215 |
Hornet Sportabout | 18.7 | 8 | 360 | 175 | 3.15 | 3.440 |
7.3 搭配dplyr
library(dplyr)
1:10, 1:2] %>%
mtcars[mutate(
car = row.names(.),
# You don't need format = "html" if you have ever defined options(knitr.table.format)
mpg = cell_spec(mpg, "html", color = ifelse(mpg > 20, "red", "blue")),
cyl = cell_spec(cyl, "html", color = "white", align = "c", angle = 45,
background = factor(cyl, c(4, 6, 8),
c("#666666", "#999999", "#BBBBBB")))
%>%
) select(car, mpg, cyl) %>%
kable("html", escape = F) %>%
kable_styling("striped", full_width = F)
car | mpg | cyl | |
---|---|---|---|
Mazda RX4 | Mazda RX4 | 21 | 6 |
Mazda RX4 Wag | Mazda RX4 Wag | 21 | 6 |
Datsun 710 | Datsun 710 | 22.8 | 4 |
Hornet 4 Drive | Hornet 4 Drive | 21.4 | 6 |
Hornet Sportabout | Hornet Sportabout | 18.7 | 8 |
Valiant | Valiant | 18.1 | 6 |
Duster 360 | Duster 360 | 14.3 | 8 |
Merc 240D | Merc 240D | 24.4 | 4 |
Merc 230 | Merc 230 | 22.8 | 4 |
Merc 280 | Merc 280 | 19.2 | 6 |
7.4 搭配formattable
library(formattable)
1:5, 1:4] %>%
mtcars[mutate(
car = row.names(.),
mpg = color_tile("white", "orange")(mpg),
cyl = cell_spec(cyl, "html", angle = (1:5)*60,
background = "red", color = "white", align = "center"),
disp = ifelse(disp > 200,
cell_spec(disp, "html", color = "red", bold = T),
cell_spec(disp, "html", color = "green", italic = T)),
hp = color_bar("lightgreen")(hp)
%>%
) select(car, everything()) %>%
kable("html", escape = F) %>%
kable_styling("hover", full_width = F) %>%
column_spec(5, width = "3cm") %>%
add_header_above(c(" ", "Hello" = 2, "World" = 3))
car | mpg | cyl | disp | hp | |
---|---|---|---|---|---|
Mazda RX4 | Mazda RX4 | 21.0 | 6 | 160 | 110 |
Mazda RX4 Wag | Mazda RX4 Wag | 21.0 | 6 | 160 | 110 |
Datsun 710 | Datsun 710 | 22.8 | 4 | 108 | 93 |
Hornet 4 Drive | Hornet 4 Drive | 21.4 | 6 | 258 | 110 |
Hornet Sportabout | Hornet Sportabout | 18.7 | 8 | 360 | 175 |
7.5 列组
kable(dt, "html") %>%
kable_styling("striped") %>%
add_header_above(c(" " = 1, "Group 1" = 2, "Group 2" = 2, "Group 3" = 2))
mpg | cyl | disp | hp | drat | wt | |
---|---|---|---|---|---|---|
Mazda RX4 | 21.0 | 6 | 160 | 110 | 3.90 | 2.620 |
Mazda RX4 Wag | 21.0 | 6 | 160 | 110 | 3.90 | 2.875 |
Datsun 710 | 22.8 | 4 | 108 | 93 | 3.85 | 2.320 |
Hornet 4 Drive | 21.4 | 6 | 258 | 110 | 3.08 | 3.215 |
Hornet Sportabout | 18.7 | 8 | 360 | 175 | 3.15 | 3.440 |
kable(dt, "html") %>%
kable_styling(c("striped", "bordered")) %>%
add_header_above(c(" ", "Group 1" = 2, "Group 2" = 2, "Group 3" = 2)) %>%
add_header_above(c(" ", "Group 4" = 4, "Group 5" = 2)) %>%
add_header_above(c(" ", "Group 6" = 6))
mpg | cyl | disp | hp | drat | wt | |
---|---|---|---|---|---|---|
Mazda RX4 | 21.0 | 6 | 160 | 110 | 3.90 | 2.620 |
Mazda RX4 Wag | 21.0 | 6 | 160 | 110 | 3.90 | 2.875 |
Datsun 710 | 22.8 | 4 | 108 | 93 | 3.85 | 2.320 |
Hornet 4 Drive | 21.4 | 6 | 258 | 110 | 3.08 | 3.215 |
Hornet Sportabout | 18.7 | 8 | 360 | 175 | 3.15 | 3.440 |
7.6 行组
kable(mtcars[1:10, 1:6], "html", caption = "Group Rows") %>%
kable_styling("striped", full_width = F) %>%
group_rows(index = c(" " = 3, "Group 1" = 4, "Group 2" = 3))
mpg | cyl | disp | hp | drat | wt | |
---|---|---|---|---|---|---|
Mazda RX4 | 21.0 | 6 | 160.0 | 110 | 3.90 | 2.620 |
Mazda RX4 Wag | 21.0 | 6 | 160.0 | 110 | 3.90 | 2.875 |
Datsun 710 | 22.8 | 4 | 108.0 | 93 | 3.85 | 2.320 |
Group 1 | ||||||
Hornet 4 Drive | 21.4 | 6 | 258.0 | 110 | 3.08 | 3.215 |
Hornet Sportabout | 18.7 | 8 | 360.0 | 175 | 3.15 | 3.440 |
Valiant | 18.1 | 6 | 225.0 | 105 | 2.76 | 3.460 |
Duster 360 | 14.3 | 8 | 360.0 | 245 | 3.21 | 3.570 |
Group 2 | ||||||
Merc 240D | 24.4 | 4 | 146.7 | 62 | 3.69 | 3.190 |
Merc 230 | 22.8 | 4 | 140.8 | 95 | 3.92 | 3.150 |
Merc 280 | 19.2 | 6 | 167.6 | 123 | 3.92 | 3.440 |
kable(dt, "html") %>%
kable_styling("striped", full_width = F) %>%
group_rows("Group 1", 3, 5, label_row_css = "background: repeating-linear-gradient(45deg, #d9230f, #d9230f 10px, #f96352 10px, #f96352 20px); color: #fff;")
mpg | cyl | disp | hp | drat | wt | |
---|---|---|---|---|---|---|
Mazda RX4 | 21.0 | 6 | 160 | 110 | 3.90 | 2.620 |
Mazda RX4 Wag | 21.0 | 6 | 160 | 110 | 3.90 | 2.875 |
Group 1 | ||||||
Datsun 710 | 22.8 | 4 | 108 | 93 | 3.85 | 2.320 |
Hornet 4 Drive | 21.4 | 6 | 258 | 110 | 3.08 | 3.215 |
Hornet Sportabout | 18.7 | 8 | 360 | 175 | 3.15 | 3.440 |
# 行的缩进
kable(dt, "html") %>%
kable_styling("striped", full_width = F) %>%
add_indent(c(1, 3, 5))
mpg | cyl | disp | hp | drat | wt | |
---|---|---|---|---|---|---|
Mazda RX4 | 21.0 | 6 | 160 | 110 | 3.90 | 2.620 |
Mazda RX4 Wag | 21.0 | 6 | 160 | 110 | 3.90 | 2.875 |
Datsun 710 | 22.8 | 4 | 108 | 93 | 3.85 | 2.320 |
Hornet 4 Drive | 21.4 | 6 | 258 | 110 | 3.08 | 3.215 |
Hornet Sportabout | 18.7 | 8 | 360 | 175 | 3.15 | 3.440 |
# 合并行
<- data.frame(C1 = c(rep("a", 10), rep("b", 5)),
collapse_rows_dt C2 = c(rep("c", 7), rep("d", 3), rep("c", 2), rep("d", 3)),
C3 = 1:15,
C4 = sample(c(0,1), 15, replace = TRUE))
kable(collapse_rows_dt, "html", align = "c") %>%
kable_styling(full_width = F) %>%
column_spec(1, bold = T) %>%
collapse_rows(columns = 1:2)
C1 | C2 | C3 | C4 |
---|---|---|---|
a | c | 1 | 1 |
a | c | 2 | 0 |
a | c | 3 | 0 |
a | c | 4 | 1 |
a | c | 5 | 0 |
a | c | 6 | 0 |
a | c | 7 | 0 |
a | d | 8 | 1 |
a | d | 9 | 0 |
a | d | 10 | 1 |
b | c | 11 | 1 |
b | c | 12 | 1 |
b | d | 13 | 1 |
b | d | 14 | 1 |
b | d | 15 | 0 |