使用 kable() 格式化带有嵌套列的表

Posted

技术标签:

【中文标题】使用 kable() 格式化带有嵌套列的表【英文标题】:format a table with a nested column with kable() 【发布时间】:2022-01-20 14:50:50 【问题描述】:

我正在制作一个 R markdown 文档,展示进行一些模拟的过程。简而言之,模拟将是两个变量的组合,每个变量都有 100 次试验。有时,我想在 .rmd 中显示一个数据框,因为正在构建模拟数据框。有时,这意味着显示一个带有嵌套列(与tidyr 嵌套)的数据框只是为了显示“看,这里有 100 件事情”。

当我使用head() 显示带有嵌套列的数据框时,嵌套列显示为带有尺寸的<list>(见图1)。见下图。我喜欢这个输出,因为我只想展示“看,这里有 100 个东西折叠了”。

但是,当我使用 kable()(出于格式原因我更喜欢它)时,它会用逗号扩展列表列,这是我不喜欢的。看这里:

有没有一种方法可以让我使用 kable 格式,但仍然让嵌套列显示为 <tibble [100 × 1]>

这里是 rmd 的 R 块:


    \```r , message=FALSE <- remove slash
    
    library(tibble)
    library(dplyr)
    library(tidyr)
    library(knitr)
    library(kableExtra)
    
    
    df <- tibble(
      var1 = c(1,2,3,1,2,3,1,2,3),
      var2 = c("a","a","a","b","b","b","c","c","c")
    ) %>%
      group_by(var1, var2) %>%
      slice(rep(1:n(), each = 100)) %>%
      mutate(trial = c(1:n())) %>%
      nest(data = trial)
    
    head(df)
    
    kable(head(df)) %>%
        kable_minimal() 
    \``` <- remove that slash

【问题讨论】:

【参考方案1】:

也许,使用reactable

\```r , message=FALSE, echo = FALSE 

library(tibble)
library(dplyr)
library(tidyr)
library(knitr)
library(reactable)

df <- tibble(
  var1 = c(1,2,3,1,2,3,1,2,3),
  var2 = c("a","a","a","b","b","b","c","c","c")
) %>%
  group_by(var1, var2) %>%
  slice(rep(1:n(), each = 100)) %>%
  mutate(trial = c(1:n())) %>%
  nest(data = trial)


reactable(df %>% 
              ungroup %>%
               mutate(data = NULL), details = function(index) 
  tmp <- df$data[[index]]
  htmltools::div(style = "padding: 16px", reactable(tmp))

)
\``` 

-输出

【讨论】:

以上是关于使用 kable() 格式化带有嵌套列的表的主要内容,如果未能解决你的问题,请参考以下文章

如何格式化结果是具有 3 列的表的 CString 变量?

如何在使用 Pandas.read_gbq 加载带有列表列的表后恢复结构?

格式化带有列的项目列表

如何在带有`knitr::kable`的表格*上方添加标题?

python上是不是有等效的kable(R)?

如何使用 HIVE 以其他格式更改或修改日期列值