使用 Rmarkdown 和 pander 对齐和倾斜 table 列标题
Aligning and italicising table column headings using Rmarkdown and pander
我正在编写一个 rmarkdown 文档编织成 pdf,其中 tables 从 ezANOVA 包的部分列表中获取。 tables 是使用 pander 包制作的。 Toy Rmarkdown 文件包含以下玩具数据集。
---
title: "Table Doc"
output: pdf_document
---
```{r global_options, include=FALSE}
#set global knit options parameters.
knitr::opts_chunk$set(fig.width=12, fig.height=8, fig.path='Figs/',
echo=FALSE, warning=FALSE, message=FALSE, dev = 'pdf')
```
```{r, echo=FALSE}
# toy data
id <- rep(c(1,2,3,4), 5)
group1 <- factor(rep(c("A", "B"), 10))
group2 <- factor(rep(c("A", "B"), each = 10))
dv <- runif(20, min = 0, max = 10)
df <- data.frame(id, group1, group2, dv)
```
``` {r anova, echo = FALSE}
library(ez)
library(plyr)
library(pander)
# create anova object
anOb <- ezANOVA(df,
dv = dv,
wid = id,
between = c(group1, group2),
type = 3,
detailed = TRUE)
# extract the output table from the anova object, reduce it down to only desired columns
anOb <- data.frame(anOb[[1]][, c("Effect", "F", "p", "p<.05")])
# format entries in columns
anOb[,2] <- format( round (anOb[,2], digits = 1), nsmall = 1)
anOb[,3] <- format( round (anOb[,3], digits = 4), nsmall = 1)
pander(anOb, justify = c("left", "center", "center", "right"))
```
现在我有一些问题
a) 对于最后三列,我希望 table 中的列标题居中对齐,但这些标题下方的实际列条目向右对齐。
b) 我希望列标题 'F' 和 'p' 为斜体,'p' 在 'p<.05' 列中也为斜体,但其余部分为正常字体。所以他们读 F、p 和 p<.05
我尝试像这样使用 plyr::rename 重命名列标题
anOb <- rename(anOb, c("F" = "italic(F)", "p" = "italic(p)", "p<.05" = ""))
但是没用
在 markdown 中,斜体必须使用 markdown 语法,即在星号或下划线之间换行:
> names(anOb) <- c('Effect', '*F*', '*p*', '*p<.05*')
> pander(anOb)
-----------------------------------------
Effect *F* *p* *p<.05*
--------------- ------ -------- ---------
(Intercept) 52.3 0.0019 *
group1 1.3 0.3180
group2 2.0 0.2261
group1:group2 3.7 0.1273
-----------------------------------------
如果您想以编程方式执行此操作,您还可以使用 pandoc.emphasis
辅助函数将开头添加到字符串中。
但是你的另一个问题是由于包中的一个错误,我刚刚在 GH 上提出了修复。请随时尝试该分支并报告 GH——我将在本周晚些时候尝试抽出一些时间来清理相关的单元测试并合并分支,如果一切正常的话。
我正在编写一个 rmarkdown 文档编织成 pdf,其中 tables 从 ezANOVA 包的部分列表中获取。 tables 是使用 pander 包制作的。 Toy Rmarkdown 文件包含以下玩具数据集。
---
title: "Table Doc"
output: pdf_document
---
```{r global_options, include=FALSE}
#set global knit options parameters.
knitr::opts_chunk$set(fig.width=12, fig.height=8, fig.path='Figs/',
echo=FALSE, warning=FALSE, message=FALSE, dev = 'pdf')
```
```{r, echo=FALSE}
# toy data
id <- rep(c(1,2,3,4), 5)
group1 <- factor(rep(c("A", "B"), 10))
group2 <- factor(rep(c("A", "B"), each = 10))
dv <- runif(20, min = 0, max = 10)
df <- data.frame(id, group1, group2, dv)
```
``` {r anova, echo = FALSE}
library(ez)
library(plyr)
library(pander)
# create anova object
anOb <- ezANOVA(df,
dv = dv,
wid = id,
between = c(group1, group2),
type = 3,
detailed = TRUE)
# extract the output table from the anova object, reduce it down to only desired columns
anOb <- data.frame(anOb[[1]][, c("Effect", "F", "p", "p<.05")])
# format entries in columns
anOb[,2] <- format( round (anOb[,2], digits = 1), nsmall = 1)
anOb[,3] <- format( round (anOb[,3], digits = 4), nsmall = 1)
pander(anOb, justify = c("left", "center", "center", "right"))
```
现在我有一些问题
a) 对于最后三列,我希望 table 中的列标题居中对齐,但这些标题下方的实际列条目向右对齐。
b) 我希望列标题 'F' 和 'p' 为斜体,'p' 在 'p<.05' 列中也为斜体,但其余部分为正常字体。所以他们读 F、p 和 p<.05
我尝试像这样使用 plyr::rename 重命名列标题
anOb <- rename(anOb, c("F" = "italic(F)", "p" = "italic(p)", "p<.05" = ""))
但是没用
在 markdown 中,斜体必须使用 markdown 语法,即在星号或下划线之间换行:
> names(anOb) <- c('Effect', '*F*', '*p*', '*p<.05*')
> pander(anOb)
-----------------------------------------
Effect *F* *p* *p<.05*
--------------- ------ -------- ---------
(Intercept) 52.3 0.0019 *
group1 1.3 0.3180
group2 2.0 0.2261
group1:group2 3.7 0.1273
-----------------------------------------
如果您想以编程方式执行此操作,您还可以使用 pandoc.emphasis
辅助函数将开头添加到字符串中。
但是你的另一个问题是由于包中的一个错误,我刚刚在 GH 上提出了修复。请随时尝试该分支并报告 GH——我将在本周晚些时候尝试抽出一些时间来清理相关的单元测试并合并分支,如果一切正常的话。