如何使用分组变量对kableExtra中的行进行分组?

如何使用分组变量对kableExtra中的行进行分组?,r,grouping,kableextra,R,Grouping,Kableextra,MWE数据集(组=分组变量) 但是,对于30个或更多的唯一分组标识符,手动执行此操作非常繁琐。所以我一直在试验一种程序化的方法 我尝试使用运行长度编码,但无法使其工作;例如,此代码失败: kable(tib[, 2]) %>% pack_rows(index = c("a" = 2, "b" = 1, "c" = 3)) 如果您能给我一些建议或建议来解决这个问题,我将不胜感激。group\u rows()正在接受一个命名向

MWE数据集(组=分组变量)

但是,对于30个或更多的唯一分组标识符,手动执行此操作非常繁琐。所以我一直在试验一种程序化的方法

我尝试使用运行长度编码,但无法使其工作;例如,此代码失败:

kable(tib[, 2]) %>% 
  pack_rows(index = c("a" = 2, "b" = 1, "c" = 3))
如果您能给我一些建议或建议来解决这个问题,我将不胜感激。

group\u rows()
正在接受一个命名向量。这里有一个方法:

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

您可以使用一个简单的

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

如果您的索引行不是按字母顺序排列的,您可以使用
fct\u按顺序执行以下操作
forcats
(包含在
tidyverse
中)

tib2%
打包行(索引=表(fct inorder(tib2$group)))

也许是您的另一种选择?谢谢!!这为我解决了问题。完美。此方法仅在分组变量按字母或数字顺序排列时有效,例如,如果
tib$group,则您可以先使用
fct\u inorder
,然后应用该表,请参见我的编辑。@kath有没有办法对多列执行此操作?
kable(tib[, 2]) %>% 
  pack_rows(rle(tib$group)[2], rle(tib$group)[1])
kable(tib[, 2]) %>% 
  group_rows(index = setNames(rle(tib$group)[[1]], rle(tib$group)[[2]]))
kable(tib[, 2]) %>% 
  pack_rows(index = table(tib$group))
tib2 <- tibble(group = c("b", "c", "c", "c", "a", "a"),
              var = 1:6)

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