代码之家  ›  专栏  ›  技术社区  ›  zoowalk

组合用kableExtra表中的迷你图

  •  2
  • zoowalk  · 技术社区  · 6 年前

    我正在尝试创建一个带有副标题和迷你图的表。

    我可以用 kableExtra 包裹。我可以用 formattable sparkline 包裹。

    我看见了 this

    library(sparkline)
    library(tidyverse)
    library(formattable)
    library(kableExtra)
    
    df <- data.frame(stringsAsFactors=FALSE,
              V1 = c("country", "A", "B", "C"),
              V2 = c(2000L, 100L, 600L, 50L),
              V3 = c(2001L, 200L, 500L, 60L),
              V4 = c(2002L, 300L, 400L, 70L),
              V5 = c(2003L, 400L, 300L, 80L),
              V6 = c(2004L, 500L, 200L, 90L),
              V7 = c(2005L, 600L, 100L, 100L)
    )
    
    df.names <- df[1,]
    names(df) <- df.names
    df <- df[-1,]
    
    graph <- df %>% 
      group_by(country) %>% 
      gather(key=year, value=value, -country) %>% 
      summarise(graph=spk_chr(
        value, 
        chartRangeMin = 0,
        type="line"))
    
    df2 <- left_join(df, graph, by=c("country"))
    
    
    df2 %>%
      formattable::formattable(align=c("l")) %>% 
      as.htmlwidget() %>% 
      spk_add_deps()
    

    enter image description here

    df2 %>%
      kable("html", caption="Title", escape=T) %>% 
      kable_styling("striped", full_width = F) %>%
      group_rows("group1", 1, 2) %>%
      group_rows("group2", 3,3)
    

    enter image description here

    df2 %>%
      kable("html", caption="Title", escape=T) %>% 
      kable_styling("striped", full_width = F) %>%
      group_rows("group1", 1, 2) %>%
      group_rows("group2", 3,3) %>% 
      formattable::formattable(align=c("l")) %>% 
      as.htmlwidget() %>% 
      spk_add_deps()
    

    创建错误:

    Error in create_obj(x, "formattable", list(formatter = formatter, format = list(...),  : 
      argument "formatter" is missing, with no default
    

    注意我两个都试过了 kable("html", caption="Title", escape=TRUE) and escape=FALSE

    1 回复  |  直到 6 年前
        1
  •  1
  •   Hans Hellemons    6 年前

    library(sparkline)
    library(tidyverse)
    library(formattable)
    library(kableExtra)
    library(shiny)
    library(htmltools)
    
    df <- data.frame(stringsAsFactors=FALSE,
                 V1 = c("country", "A", "B", "C"),
                 V2 = c(2000L, 100L, 600L, 50L),
                 V3 = c(2001L, 200L, 500L, 60L),
                 V4 = c(2002L, 300L, 400L, 70L),
                 V5 = c(2003L, 400L, 300L, 80L),
                 V6 = c(2004L, 500L, 200L, 90L),
                 V7 = c(2005L, 600L, 100L, 100L)
    )
    
    df.names <- df[1,]
    names(df) <- df.names
    df <- df[-1,]
    
    graph <- df %>% 
      group_by(country) %>% 
      gather(key=year, value=value, -country) %>% 
      summarise(graph=spk_chr(
        value, 
        chartRangeMin = 0,
        type="line"))
    
    df2 <- left_join(df, graph, by=c("country"))
    
    df2 %>%
    formattable::format_table(
      x = .,
      formatters = list(
        align=c("l")
      )
    ) %>%
      kable_styling("striped", full_width = F) %>%
      group_rows("group1", 1, 2) %>%
      group_rows("group2", 3,3) %>%
      htmltools::HTML() %>%
      shiny::div() %>%
      sparkline::spk_add_deps()
    

    解决办法是 formattable::format_table() knitr_kable 对象。