【问题标题】:How to group rows in kableExtra with a grouping variable: `pack_rows()`?如何使用分组变量对 kableExtra 中的行进行分组:`pack_rows()`?
【发布时间】:2019-03-26 09:16:16
【问题描述】:
library(kableExtra)
library(tibble)

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

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

这就是我想要实现的目标:

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

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

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

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

如果您有任何解决此问题的指示或建议,我将不胜感激。

【问题讨论】:

  • 也许collapse_rows 是你的替代品?
  • 谢谢!!这为我解决了。完美。

标签: r grouping kableextra


【解决方案1】:

你可以使用简单的table

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

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

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

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

【讨论】:

  • 此方法仅适用于分组变量按字母或数字顺序排列的情况,例如,如果tib$group &lt;- c("c", "c", "c", "b", "a", "a")tib$var 与以前一样,“表”索引方法不会导致正确的分组。
  • 那你可以先用fct_inorder再应用表格,看我的编辑。
  • @kath 有没有办法用多列做到这一点?
【解决方案2】:

group_rows() 正在接受一个命名向量。这是一种方法:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-18
    相关资源
    最近更新 更多