如何在Rmd文件的html输出中显示 Dataframe 的行数和组数?

fdbelqdn  于 2023-04-18  发布在  其他
关注(0)|答案(2)|浏览(165)

如果我在RStudio的.Rmd文件块中写入这些内容

library(dplyr)
df %>%
group_by(var)

然后我运行块,输出将有

A tibble: 789542 x 8 Groups: var[8]

在打印的数据框的顶部。
我发现这些信息非常有用,我想有他们也在html文档中我编织这个。Rmd文件,但现在我一直不成功。
我试了所有的选择

output:
  html_document:
    df_print:

它们被分页、tibble、kable和kable-scroll。
我不知道是否有更多的可选参数,或者你是否可以用可选参数来调整它们,广泛的谷歌搜索一无所获。我不知道如何开始编写自定义函数。
我还尝试了DT:::datatable(),但它只显示行数,而不是组数。
我知道我可以将额外的nrow()n_groups()通过管道传输到每个df,但如果可能的话,我希望避免这样做。
这个html文档将在一个非常简单的github页面中呈现。我知道blogdown/hugo和新的夸托更强大,也许他们提供了一个解决方案,但我不知道我是否想学习如何使用它们(我听说它们要复杂得多)。

qf9go6mv

qf9go6mv1#

我尝试使用一个简单的自定义函数来复制这一点。输出不完全相同,但它可能能够满足您的需求。
下面是使用mtcars数据集和“cyl”列的演示。

PrintSummary <- function(df, col){
  
  Line1 <- paste0("A tibble: ", nrow(df), " x ", ncol(df))
  Line2 <- paste0("Groups: ", col, "[", length(unique(df[, col])), "]")
  
  message(Line1)
  message(Line2)
  
}

PrintSummary(mtcars, "cyl")

输出应如下所示:

A tibble: 32 x 11
Groups: cyl[3]
ou6hu8tu

ou6hu8tu2#

为了显示tibble信息(行数x列数和组信息)沿着分页输出,我们可以通过修改print.paged_df函数(rmarkdown在内部使用df_print功能)编写一个自定义函数,并使用CSS来很好地格式化输出。

---
title: "Showing data group info"
output: html_document
---

# R markdown

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE, df_print="info_paged")
info_paged_print <- function(x, options) {
  tibble_info <- paste0("<div class=\"tibble-info\">A tibble: ", nrow(x), " x ", ncol(x), "</div>")
  group_info <- paste0("<div class=\"group-info\">Groups: ", 
                      paste0(group_vars(x), collapse = ", "), 
                      " [", nrow(group_keys(x)), "]", "</div>")
  
  if (dplyr::is_grouped_df(x)) {
    tab_info <- paste0("<div class=\"info\">", tibble_info, " ", group_info, "</div>")
    cat(tab_info)
  } else {
    cat(paste0("<div class=\"info\">", tibble_info, "</div>"))
  }
  knitr::asis_output(
    rmarkdown:::paged_table_html(x, options = attr(x, "options")),
    meta = list(
      dependencies = rmarkdown:::html_dependency_pagedtable()
    )
  )
}

knitr::opts_hooks$set(df_print = function(options) {
  if (options$df_print == "info_paged") {
    options$render = info_paged_print
    options$comment = ""
    options$results = "asis"
  }
  options
})
.tibble-info,
.group-info {
  display: inline-block;
  padding: 15px;
}

.info {
  margin-top: 5px;
  margin-bottom: 5px;
  border: 1px solid #ccc;
  border-radius: 4px;
  font-weight: 600;
  color: #999898;
}
library(dplyr)

Grouped Data

mtcars %>% 
  group_by(am, vs)

Ungrouped Data

head(mtcars)

logical filtering

mtcars %>% 
  mutate(
    logical = if_else(mpg > mean(mpg), TRUE, FALSE)
  ) %>% 
  filter(logical)

![](https://i.stack.imgur.com/71Tli.png)

您可以调整CSS来呈现`tibble`信息。

相关问题