如何手动创建一个简单的表格并在 R Markdown 中使用 knitr:kable 呈现它(更准确地说:在 Bookdown 中)?

手册 "Bookdown: Authoring Books and Technical Documents with R Markdown" 教授如何使用 knitr::kable 呈现表格,从而获得表格的自动编号(以及其他好处)。

也可以使用 R Markdown 代码手动创建一个简单的表格,该代码非常易于阅读和编辑。

问题:如何使用 knitr::kable 呈现这样一个手动创建的表格?

请参阅下面的 MWE,用 R Markdown/Bookdown 项目编写:

---
documentclass: book
output:
  bookdown::gitbook: default
---

# Just a test

With knitr::kable, I have references to automatically numbered tables. Such as Table @ref(tab:table1). 

``` {r table1, tidy=FALSE, echo=FALSE}
knitr::kable(
  头(mtcars [,1:2],2),booktabs = TRUE,
  标题 = '测试表 1。'
)


In my project, I manually create tables with R Markdown code. However, I dont know how to:

  1. express this manually created table with knitr::kable, and
  2. thus get automatic numbering to the table.

See an example of a manually entered table below. Problems: no numbering, and how to refer to it?


Table: Manually entered data in a simple table - easy to read, easy to edit as R Markdown code.

Column 1 Column 2


lorem ipsum
dolor sit

stack overflow How to manually create a simple table and present it with knitr:kable in R Markdown (more precisely: in Bookdown)?
原文答案

答案:

作者头像

您可以手动执行此操作:

---
documentclass: book
output:
  bookdown::gitbook: default
---

# Just a test

With knitr::kable, I have references to automatically numbered tables. Such as Table @ref(tab:table1). 

``` {r table1, tidy=FALSE, echo=FALSE}
knitr::kable(
  头部(mtcars [, 1:2], 2), booktabs = TRUE,
  caption = 'Test table 1.'
)



Such as Table 1.2.

.
In my project, I manually create tables with R Markdown code. However, I dont know how to:

  1. express this manually created table with knitr::kable, and
  2. thus get automatic numbering to the table.

See an example of a manually entered table below. Problems: no numbering, and how to refer to it?


Column 1 Column 2 ------------- --------- lorem ipsum dolor sit
Table 1.2: Test table 2.


[![enter image description here](https://i.stack.imgur.com/EldVh.png) ](https://i.stack.imgur.com/EldVh.png)
作者头像

经过数小时的搜索,我找到了几个可能的解决方案来解决我自己的问题。由于自动编号在使用 kable 的 bookdown 中有点棘手,我想我可以分享我的发现。

解决方案 1:

使用 tribble 函数可以轻松组合手动创建的表。随后,可以将 tribble 和 kable 命令填充到 R Markdown 中的同一个 R 块中。

但是,使用 tribble 输入数据不如使用简单的 markdown 方便,因为字符/字符串需要引号。

另请注意,kable 必须有一个标题参数,否则自动编号将不起作用。(请参阅下面的我的 MWE。)

解决方案 2:

另一种选择是使用 read.table 方法。使用此方法,不需要引号。但是,代码不再那么容易阅读了。

似乎即使使用降价,有时也必须在代码的可读性上做出妥协。

编辑:经过进一步搜索,我得出的结论是解决方案 1(见上文)加上使用 datapasta 包和 kable 达到了最佳效果 - 你得到 1)由提供的自动编号kable,2)datapasta的“Paste as tribble”插件不需要手动插入引号,最后,3)tribble的可读性是可以容忍的。

MWE:

---
documentclass: book
output:
  bookdown::gitbook: default
---

# Just a test

Below we have the Table @ref(tab:table1) that has been created with the tribble function and is presented with the kable function.

``` {r table1, tidy=FALSE}
图书馆(tidyverse)
数据1 <- tribble(
  〜“第1列”,〜“第2列”,
  "lorem ipsum dolor", "sit amet, consectetur",
  "adipisci elit, sed eiusmod tempor", "incidunt ut labore et dolore magna aliqua"
)
knitr::kable((data1), booktabs = TRUE,
标题='一个测试表。')


Another option is to use a read.table approach. With this method, quotation marks are not needed. However, the code is not as easily readable anymore. Please see the Table @ref(tab:table2) below.


data2 <- read.table(stringsAsFactors = FALSE, header = TRUE, sep="/", text =
'第 1 列/第 2 列
lorem ipsum dolor/sit amet, consectetur
adipisci elit, sed eiusmod tempor/incidunt ut labore et dolore magna aliqua'
)
knitr::kable((data2), booktabs = TRUE,
caption = '另一个测试表。')
作者头像

我发现您的 read.table 解决方案非常简洁。我不认为代码不可读,您可以从 Excel 文件中复制粘贴并使用 sep="t" 而不是 "/"。