有没有一种方法可以在RMarkdown或夸托中并排折叠table?

rbl8hiat  于 2023-03-27  发布在  其他
关注(0)|答案(2)|浏览(122)

有没有一种方法可以用RMarkdown或夸托 Package 一个表?
我经常处理时间序列数据,需要列出它们。我使用HTML作为输出格式。
举个例子,假设我从2022年1月1日到2022年7月1日每天测量一次温度,这个数据有182行观测值,我想用适当长度的数据来显示它。
我在示例代码中使用了{kableExtra},以便在Markdown中输出Stackoverflow,但我并不特别关注表输出的包。

data <- tibble::tibble(
  date = seq.Date(from = as.Date("2022-01-01"), to = as.Date("2022-07-01"), by = "day"),
  temp = rnorm(length(date), mean = 35.5, sd = 0.3)
)

# Here is the top of the table
head(data) |> 
  kableExtra::kbl(format = "markdown", digits = 1)

| 日期|温度|
| - ------|- ------|
| 2022年1月1日|三十五点二|
| 2022年1月2日|三十五点五|
| 2022年1月3日|三十五点六|
| 2022年1月4日|三十六点三|
| 2022-01-05 2022-01-05|三十五点五|
| 2022年1月6日|三十五点五|
创建于2022年11月6日,使用reprex v2.0.2

shyt4zoc

shyt4zoc1#

我意识到在编辑这个答案一个小时后,我的答案有点偏离了主题。我的答案已经转移到了如何进行任何类型的输出折叠的问题上。
如果你想做10行数据,每行5行,我想你的意思是像分页?那么我不知道如何做到这一点。
如果你想要一个部分表,我知道dyplyr::tibble()会打印出前10行数据,并缩写其余的数据。使用dyplyr::tibble(knitr::kable(your_table)),它会打印表,但以纯文本格式,如markdown表。
我最近换到了夸托,看起来他们也没有任何分页功能。下面我提供了3个方法,我知道它们可以在Rmd上工作,也可能在Quarto上工作。

附言

  • 前两个方法不*折叠表。但它将总是**折叠纯文本输出。
方法一:使用CSS Syling的可滚动输出

参考R Markdown Cookbook-7.4 Scrollable Code Blocks,使用CSS样式,

```{css, echo=FALSE}
pre {
  max-height: 300px;
  overflow-y: auto;
}

pre[class] {
  max-height: 100px;
}

.scroll-100 {
  max-height: 100px;
  overflow-y: auto;
  background-color: inherit;
}
 
1:1000

**输出**:x1c 0d1x

##### 方法二:使用Pandoc的Fenced Code Blocks的可滚动输出

关于[R Markdown Cookbook-12.3 Scrollable Text Output](https://bookdown.org/yihui/rmarkdown-cookbook/hook-scroll.html)
一个二个一个一个

**输出**:
![](https://i.stack.imgur.com/poe25.png)

##### 方法三:使用HTML按钮和Div标记折叠所有内容

既然你使用的是HTML,我想一个替代方案是尝试使用HTML。下面的代码将给予你一个引导功能按钮,你可以隐藏任何东西在那里。你也可以合并这种方法与方法1或2。

Show/Hide Tables

```{r}
  you code to print tables
```

输出

注意:这需要包含你的源代码(可以使用echo=FLASE),如果你的表很大或者里面有单张Map之类的东西,点击查看可能会出现滞后,建议使用head(your_table)函数。
PS:如果你对kableExtra的表格输出不满意,也许可以试试knitr::kable(you code to print table)rmarkdown::paged_table(...)pander::pander(...)。我特别喜欢pander的PDF输出表格,它将支持Latex的表格居中显示列/行名称。但是根据HTML主题输出,pander()并不总是最好的。

jm81lzqq

jm81lzqq2#

如果你想完全折叠夸托中的一些内容(比如带有#| code-fold: true的代码块),你可以在它周围放置html details标签:

```{=html}
<details>
<summary>Click to expand</summary>

Your content that can be collapsed/folded.

</details>

相关问题