使用kableExtra将分组变量与剥离/阴影匹配

时间:2018-08-22 17:06:19

标签: r markdown kable kableextra

我有一个表,其中每个表都有多个记录(ID1,并且希望行底纹(即kable_styling(c("striped"))按组(ID1)而不是每隔一行。我希望可以在下面的代码中添加group_by(ID1) ... las,我还在寻找解决方案。尽管有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 个答案:

答案 0 :(得分:2)

现在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")