패키지 소개
- 데이터프레임 등을 table로 변환하여 출력이 가능합니다.
- 조건에 따라 각 셀이나 글자의 색을 변경할 수 있습니다.
Table 구조
gt
에서의 테이블 구조는 다음과 같습니다.
gt
로 테이블을 만들기 위해 gt
패키지 내부에 있는 gtcars
데이터를 활용하도록 하겠습니다.
gtcars
는 mtcars
처럼 차량 데이터이지만, 좀더 최근의 슈퍼카 데이터로 구성되어 있습니다.
library(gt)
gtcar_dt <- as.data.table(gtcars)[,.(ctry_origin, mfr, model,year, trim, msrp)]
gtcar_dt <- gtcar_dt[gtcar_dt[,.I[1:2],by=.(ctry_origin)]$V1]
gtcar_dt[,id := seq_len(.N)]
gtcar_dt |>
gt(rowname_col = "id") |>
tab_header(
title = md("**Super cars**"),
subtitle = md("Find your *Dream* car!")
) |>
tab_footnote(
footnote = "Manufacturer",
locations = cells_column_labels(columns = mfr)
) |>
tab_footnote(
footnote = "Units: $",
locations = cells_column_labels(msrp)
) |>
tab_source_note(
source_note = md("URL: https://gt.rstudio.com/articles/intro-creating-gt-tables.html")
)
Super cars |
Find your Dream car! |
|
ctry_origin |
mfr |
model |
year |
trim |
msrp |
1 |
United States |
Ford |
GT |
2017 |
Base Coupe |
447000 |
2 |
United States |
Chevrolet |
Corvette |
2016 |
Z06 Coupe |
88345 |
3 |
Italy |
Ferrari |
458 Speciale |
2015 |
Base Coupe |
291744 |
4 |
Italy |
Ferrari |
458 Spider |
2015 |
Base |
263553 |
5 |
Japan |
Acura |
NSX |
2017 |
Base Coupe |
156000 |
6 |
Japan |
Nissan |
GT-R |
2016 |
Premium Coupe |
101770 |
7 |
United Kingdom |
Bentley |
Continental GT |
2016 |
V8 Coupe |
198500 |
8 |
United Kingdom |
Aston Martin |
DB11 |
2017 |
Base Coupe |
211195 |
9 |
Germany |
BMW |
6-Series |
2016 |
640 I Coupe |
77300 |
10 |
Germany |
BMW |
i8 |
2016 |
Mega World Coupe |
140700 |
URL: https://gt.rstudio.com/articles/intro-creating-gt-tables.html |
Stub
stub은 행의 이름과 연관된 항목들입니다. 예를 들어, gtcars
에서는 각 자동차 브랜드들의 국적을 그룹으로 나누어 표시할 수 있겠죠. 행을 그룹으로 묶어 분류를 해보도록 하겠습니다.
gtcar_dt |>
gt(rowname_col = "id") |>
tab_stubhead(label="No") |>
tab_row_group(
label = "USA",
rows = 1:2
) |>
tab_row_group(
label = "Italy",
rows = 3:4
) |> as_raw_html()
Italy |
3 |
Italy |
Ferrari |
458 Speciale |
2015 |
Base Coupe |
291744 |
4 |
Italy |
Ferrari |
458 Spider |
2015 |
Base |
263553 |
USA |
1 |
United States |
Ford |
GT |
2017 |
Base Coupe |
447000 |
2 |
United States |
Chevrolet |
Corvette |
2016 |
Z06 Coupe |
88345 |
|
5 |
Japan |
Acura |
NSX |
2017 |
Base Coupe |
156000 |
6 |
Japan |
Nissan |
GT-R |
2016 |
Premium Coupe |
101770 |
7 |
United Kingdom |
Bentley |
Continental GT |
2016 |
V8 Coupe |
198500 |
8 |
United Kingdom |
Aston Martin |
DB11 |
2017 |
Base Coupe |
211195 |
9 |
Germany |
BMW |
6-Series |
2016 |
640 I Coupe |
77300 |
10 |
Germany |
BMW |
i8 |
2016 |
Mega World Coupe |
140700 |
위의 예시에서는 tab_row_group()을 이용해 행 그룹의 이름과 행의 번호를 지정해주었습니다. 보다 편리하게 이 작업을 수행하기 위해 group_by()
를 이용해 행들을 묶을 수 있습니다.
library(dplyr)
gtcar_dt |>
group_by(ctry_origin) |>
arrange(mfr, desc(msrp)) |>
gt(rowname_col = "id")
Japan |
5 |
Acura |
NSX |
2017 |
Base Coupe |
156000 |
6 |
Nissan |
GT-R |
2016 |
Premium Coupe |
101770 |
United Kingdom |
8 |
Aston Martin |
DB11 |
2017 |
Base Coupe |
211195 |
7 |
Bentley |
Continental GT |
2016 |
V8 Coupe |
198500 |
Germany |
10 |
BMW |
i8 |
2016 |
Mega World Coupe |
140700 |
9 |
BMW |
6-Series |
2016 |
640 I Coupe |
77300 |
United States |
2 |
Chevrolet |
Corvette |
2016 |
Z06 Coupe |
88345 |
1 |
Ford |
GT |
2017 |
Base Coupe |
447000 |
Italy |
3 |
Ferrari |
458 Speciale |
2015 |
Base Coupe |
291744 |
4 |
Ferrari |
458 Spider |
2015 |
Base |
263553 |
제조사와 모델을 합쳐서 표를 만들어 보겠습니다.
gtcar_dt |>
arrange(mfr, desc(msrp)) |>
mutate(car = paste(mfr, model)) |>
select(-mfr, -model, -id) |>
group_by(ctry_origin) |>
gt(rowname_col = "car")
Japan |
Acura NSX |
2017 |
Base Coupe |
156000 |
Nissan GT-R |
2016 |
Premium Coupe |
101770 |
United Kingdom |
Aston Martin DB11 |
2017 |
Base Coupe |
211195 |
Bentley Continental GT |
2016 |
V8 Coupe |
198500 |
Germany |
BMW i8 |
2016 |
Mega World Coupe |
140700 |
BMW 6-Series |
2016 |
640 I Coupe |
77300 |
United States |
Chevrolet Corvette |
2016 |
Z06 Coupe |
88345 |
Ford GT |
2017 |
Base Coupe |
447000 |
Italy |
Ferrari 458 Speciale |
2015 |
Base Coupe |
291744 |
Ferrari 458 Spider |
2015 |
Base |
263553 |
Column labels
Column 묶기
air_dt <- airquality |> head(10)
air_tbl <- air_dt |>
gt() |>
tab_header(
title = "New York Air Quality Measurements"
) |>
tab_spanner(
label="Measurement",
columns = c(Ozone, Solar.R, Wind, Temp)
) |>
tab_spanner(
label="Time",
columns = c(Month, Day)
)
air_tbl
Measurement |
Time |
41 |
190 |
7.4 |
67 |
5 |
1 |
36 |
118 |
8.0 |
72 |
5 |
2 |
12 |
149 |
12.6 |
74 |
5 |
3 |
18 |
313 |
11.5 |
62 |
5 |
4 |
NA |
NA |
14.3 |
56 |
5 |
5 |
28 |
NA |
14.9 |
66 |
5 |
6 |
23 |
299 |
8.6 |
65 |
5 |
7 |
19 |
99 |
13.8 |
59 |
5 |
8 |
8 |
19 |
20.1 |
61 |
5 |
9 |
NA |
194 |
8.6 |
69 |
5 |
10 |
Column 이동 및 이름 수정
air_tbl <- air_tbl |>
cols_move_to_start(
columns = c(Month, Day)
) |>
cols_label(
Ozone = html("Ozone,<br>ppbV"),
Solar.R = html("Solar R.,<br>cal/m<sup>2</sup>"),
Wind = html("Wind,<br>mph"),
Temp = html("Temp,<br>°F")
)
air_tbl
Time |
Measurement |
5 |
1 |
41 |
190 |
7.4 |
67 |
5 |
2 |
36 |
118 |
8.0 |
72 |
5 |
3 |
12 |
149 |
12.6 |
74 |
5 |
4 |
18 |
313 |
11.5 |
62 |
5 |
5 |
NA |
NA |
14.3 |
56 |
5 |
6 |
28 |
NA |
14.9 |
66 |
5 |
7 |
23 |
299 |
8.6 |
65 |
5 |
8 |
19 |
99 |
13.8 |
59 |
5 |
9 |
8 |
19 |
20.1 |
61 |
5 |
10 |
NA |
194 |
8.6 |
69 |
Column 정렬
air_tbl |>
cols_align(
align = "center",
columns = c(Month, Day)
)
Time |
Measurement |
5 |
1 |
41 |
190 |
7.4 |
67 |
5 |
2 |
36 |
118 |
8.0 |
72 |
5 |
3 |
12 |
149 |
12.6 |
74 |
5 |
4 |
18 |
313 |
11.5 |
62 |
5 |
5 |
NA |
NA |
14.3 |
56 |
5 |
6 |
28 |
NA |
14.9 |
66 |
5 |
7 |
23 |
299 |
8.6 |
65 |
5 |
8 |
19 |
99 |
13.8 |
59 |
5 |
9 |
8 |
19 |
20.1 |
61 |
5 |
10 |
NA |
194 |
8.6 |
69 |
Column 값에 따른 스타일 변경 1
gt
의 또다른 강력함은 조건에 따라 셀의 색상을 지정할 수 있다는 데 있습니다.
먼저 특정 조건에 따른 행의 색상을 지정할 수 있습니다.
air_dt |>
gt() |>
tab_style(
style = list(cell_fill(color="red"),
cell_text(weight="bold",color="white")),
locations = cells_body(columns = Wind,
rows = Wind > 10 )
) |>
tab_style(
style = list(cell_fill(color="blue"),
cell_text(weight="bold",color="white")),
locations = cells_body(columns = Wind,
rows = Wind < 10 )
)
41 |
190 |
7.4 |
67 |
5 |
1 |
36 |
118 |
8.0 |
72 |
5 |
2 |
12 |
149 |
12.6 |
74 |
5 |
3 |
18 |
313 |
11.5 |
62 |
5 |
4 |
NA |
NA |
14.3 |
56 |
5 |
5 |
28 |
NA |
14.9 |
66 |
5 |
6 |
23 |
299 |
8.6 |
65 |
5 |
7 |
19 |
99 |
13.8 |
59 |
5 |
8 |
8 |
19 |
20.1 |
61 |
5 |
9 |
NA |
194 |
8.6 |
69 |
5 |
10 |
Column 값에 따른 스타일 변경 2
다음으로는 data_color()
를 이용해 팔레트 색상을 지정할 수 있습니다. data_color()
에서 팔레트를 지정하는 방법은 다음과 같습니다.
- 원하는 색상 이름 지정
- RColorBrewer 팔레트 사용
- viridis 계열 팔레트 사용 (e.g.,
"viridis"
, "magma"
, "inferno"
, etc)
air_dt |>
gt() |>
data_color(Wind,
direction = "column",
palette=c("red","white","blue"),
domain=c(7,25)
) |>
data_color(Temp, palette = "Oranges") |>
data_color(Solar.R, palette = "magma", na_color = "steelblue")
41 |
190 |
7.4 |
67 |
5 |
1 |
36 |
118 |
8.0 |
72 |
5 |
2 |
12 |
149 |
12.6 |
74 |
5 |
3 |
18 |
313 |
11.5 |
62 |
5 |
4 |
NA |
NA |
14.3 |
56 |
5 |
5 |
28 |
NA |
14.9 |
66 |
5 |
6 |
23 |
299 |
8.6 |
65 |
5 |
7 |
19 |
99 |
13.8 |
59 |
5 |
8 |
8 |
19 |
20.1 |
61 |
5 |
9 |
NA |
194 |
8.6 |
69 |
5 |
10 |
Back to top