1

我想gt在网格中或并排生成一组表格对象。例如,下面的代码使用group_by参数将它们垂直分隔。但是如果我想让它们并排分开呢?

mtcars2 <-
  mtcars %>% 
  mutate(good_mpg = ifelse(mpg > 20, "Good mileage", "Bad mileage"), 
         car_name = row.names(.)) 

mtcars2 %>% 
  group_by(good_mpg) %>% 
  slice_max(order_by = hp, n=5) %>% 
  arrange(hp) %>% 
  select(car_name, hp) %>% 
  gt() %>% 
  data_color(columns = c("hp"), 
             colors = col_numeric(palette = "Blues", 
                                  domain = c(0, 400)))

具有垂直 group_by 的表

4

2 回答 2

3

您可以通过使用as_raw_html()内部表和fmt_markdown(columns = TRUE)顶级表来执行此操作。


hp_table <- function(x){
  gt(x) %>% 
    data_color(columns = c("hp"), 
               colors = col_numeric(palette = "Blues", 
                                    domain = c(0, 400))) %>% 
    tab_options(column_labels.hidden = TRUE) %>% 
    as_raw_html() # return as html
}

good_mpg_table <- 
  mtcars %>% 
  mutate(good_mpg = ifelse(mpg > 20, "Good mileage", "Bad mileage"), 
         car_name = row.names(.)) %>% 
  filter(good_mpg == "Good mileage") %>%
  head(5) %>% 
  arrange(hp) %>% 
  select(car_name, hp) %>% 
  hp_table()

bad_mpg_table <- 

  filter(good_mpg == "Bad mileage") %>% 
  head(5) %>% 
  arrange(hp) %>% 
  select(car_name, hp) %>% 
  hp_table() 

data_tables <- data.frame(good_table = good_mpg_table, 
                          bad_table = bad_mpg_table)

data_tables %>% 
  gt() %>% 
  fmt_markdown(columns = TRUE) %>% #render cell contents as html
  cols_label(good_table = "High mileage", 
             bad_table = "Low mileage")

并排的桌子

于 2021-01-21T21:00:16.970 回答
2

@Daniel,谢谢你分享这个!这可以派上用场。

为了使代码更紧凑,您可以使用group_map(或do)在工作流中生成两个表dplyr,然后像您一样加入它们:

library(dplyr)
library(gt)
library(scales)

hp_table <- function(x){
    gt(x) %>% 
        data_color(columns="hp", 
                   colors=col_numeric(palette="Blues", c(0, 400))) %>% 
        tab_options(column_labels.hidden = TRUE) %>% 
        as_raw_html()
}

mtcars %>% 
    mutate(good_mpg = ifelse(mpg > 20, "Good mileage", "Bad mileage"), 
           car_name = row.names(.))  %>% 
    arrange(hp) %>% 
    group_by(relevel(factor(good_mpg), "Good mileage")) %>% 
    slice_head(n=5) %>% 
    select(car_name, hp) %>%
    group_map(~ hp_table(.x)) %>% 
    data.frame(.) %>% 
    setNames(., c("High mileage", "Low mileage")) %>% 
    gt() %>% 
    fmt_markdown(columns = TRUE)

于 2021-01-22T00:57:53.603 回答