Как сгруппировать строки в kableExtra с переменной группировки? - PullRequest
0 голосов
/ 26 марта 2019
library(kableExtra)
library(tidyverse)

Набор данных MWE (группа = переменная группировки)

tib <- tibble(group = c("a", "a", "b", "c", "c", "c"),
              var = 1:6)

Вот чего я хочу достичь:

kable(tib[, 2]) %>% 
  group_rows(index = c("a" = 2, "b" = 1, "c" = 3))

Но с 30 или более уникальными идентификаторами группировки этоутомительно делать вручную.Итак, я экспериментировал с программным подходом

Я пытался использовать кодирование длин серий, но не смог заставить его работать;например, этот код не работает:

kable(tib[, 2]) %>% 
  group_rows(rle(tib$group)[2], rle(tib$group)[1])

Буду признателен за любые указатели или предложения по решению этой проблемы.

Ответы [ 2 ]

2 голосов
/ 26 марта 2019

Вы можете использовать простое table:

kable(tib[, 2]) %>% 
  group_rows(index = table(tib$group))

enter image description here

Если ваша индексная строка не упорядочена по алфавиту, вы можете сделать следующее сfct_inorder из forcats (содержится в tidyverse)

tib2 <- tibble(group = c("b", "c", "c", "c", "a", "a"),
              var = 1:6)

kable(tib2[, 2]) %>% 
  group_rows(index = table(fct_inorder(tib2$group)))

enter image description here

1 голос
/ 26 марта 2019

group_rows() принимает именованный вектор.Вот один из способов:

kable(tib[, 2]) %>% 
  group_rows(index = setNames(rle(tib$group)[[1]], rle(tib$group)[[2]]))
...