代码之家  ›  专栏  ›  技术社区  ›  B. Davis

使用kableExtra将分组变量与剥离/着色匹配

  •  2
  • B. Davis  · 技术社区  · 6 年前

    我有一个表格,每个人有多个记录( ID1 kable_styling(c("striped")) 按组替换( ID1号 )而不是隔一排。我希望我能加上 group_by(ID1) lots of helpful tips are shown here ,我一直找不到解决方案。

    我还想知道如何制作一个表的外部边框,而不是每个单元格的边框。

    下面是一个可重复的数据集。

    多谢提前。

    ```{r echo=F, warning=F, message = FALSE}
    library(tidyverse)
    library(kableExtra)
    
    set.seed(121)
    Dat <- data.frame(
      ID1 = sample(c("AAA", "BBB", "CCC","DDD"), 100, replace = T),
      ID2 = sample(c("Cat", "Dog", "Bird"), 100, replace = T),
      First = rnorm(100),
      Two = sample.int(100)) 
    
    ExTbl <- Dat %>%
      group_by(ID1, ID2) %>%
      summarize(One = mean(First),
                Max = max(Two)) %>%
      arrange(ID1) 
    
    
    kable(ExTbl) %>%
      kable_styling(c("striped", "bordered"), full_width = F)
    
    
    ```
    
    > head(as.data.frame(ExTbl) )
      ID1  ID2         One Max
    1 AAA Bird  0.15324169  86
    2 AAA  Cat -0.02726006  83
    3 AAA  Dog -0.19618126  78
    4 BBB Bird  0.62176633 100
    5 BBB  Cat -0.35502912  77
    6 BBB  Dog -0.29977145  87
    >
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   Hao    6 年前

    现在在kableExtra中没有直接的方法,但这是我上次使用的方法。也许我应该把这个装进这个包裹里。

    library(tidyverse)
    library(kableExtra)
    
    set.seed(121)
    Dat <- data.frame(
      ID1 = sample(c("AAA", "BBB", "CCC","DDD"), 100, replace = T),
      ID2 = sample(c("Cat", "Dog", "Bird"), 100, replace = T),
      First = rnorm(100),
      Two = sample.int(100)) 
    
    ExTbl <- Dat %>%
      group_by(ID1, ID2) %>%
      summarize(One = mean(First),
                Max = max(Two)) %>%
      arrange(ID1) 
    
    ind_end <- cumsum(rle(as.character(ExTbl$ID1))$lengths)
    ind_start <- c(1, ind_end[-length(ind_end)] + 1)
    pos <- purrr::map2(ind_start, ind_end, seq)
    pos <- unlist(pos[1:length(pos) %% 2 != 0])
    
    kable(ExTbl) %>%
      kable_styling(c("bordered"), full_width = F) %>%
      row_spec(pos, background = "#EEEEEE")