将条件应用于 pander 中 table 的单个列
Applying a criterion to a single column of a table in pander
我想应用一个标准,根据该标准将 pander table 中的单元格设为粗体或不设为粗体。但是我想将此标准应用于 table 的单个列而不是其他列。
这是完整的降价文档。
---
title: "Untitled"
output: pdf_document
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
```{r toy data}
pVal <- as.character(c(0.9, 0.04, 0.6, 0.0003))
FVal <- as.character(c(0.03, 2.51, 1.7, 32.1))
Group <- c("A", "B", "C", "D")
df <- data.frame(Group, FVal, pVal, stringsAsFactors = FALSE)
library(pander)
emphasize.strong.cells(which(df < 0.05, arr.ind = TRUE))
pander(df)
```
这里有两个问题。
首先是 FVal
列中满足标准的值也加粗了。我希望 pVal
列中的值 <.05 加粗 only。我尝试像这样
在 emphasize.strong.cells
函数中进行子集化
emphasize.strong.cells(which(df$pVal < 0.05, arr.ind = TRUE))
或
emphasize.strong.cells(which(df[,"pVal"] < 0.05, arr.ind = TRUE))
但都没有用。我怀疑发生这种情况是因为以这种方式进行子集化我没有给 emphasize.strong.cells
函数一个具有多个维度的对象,但我不确定如何制作一个对象,其中只有一列是 'active' 作为标准.
第二个问题是 pVal
列中的最后一个元素在最终的 rmarkdown pdf 中没有加粗,我假设是因为转换为科学记数法。
非常感谢任何解决方案。
这个简单的 hack 将为您解决。
df$pVal <- ifelse(df$pVal < 0.05, paste0("**", df$pVal, "**"), df$pVal)
pander(df)
-----------------------
Group FVal pVal
------- ------ --------
A 0.03 0.9
B 2.51 **0.04**
C 1.7 0.6
D 32.1 3e-04
-----------------------
如果将 pVal
更改为 as.numeric
,最终值也会变为粗体。
我认为这是一个 matrix
操作问题,而不是特定于 pander
,因为 emphasize.cells
接受 which(..., arr.ind = TRUE)
返回的 matrix
即如果我对这个问题的理解是正确的,将被过滤到第 3 列。参见例如:
> emphasize.strong.cells(as.matrix(subset(data.frame(which(df < 0.05, arr.ind = TRUE)), col == 3)))
> pander(df)
-----------------------
Group FVal pVal
------- ------ --------
A 0.03 0.9
B 2.51 **0.04**
C 1.7 0.6
D 32.1 3e-04
-----------------------
我想应用一个标准,根据该标准将 pander table 中的单元格设为粗体或不设为粗体。但是我想将此标准应用于 table 的单个列而不是其他列。
这是完整的降价文档。
---
title: "Untitled"
output: pdf_document
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
```{r toy data}
pVal <- as.character(c(0.9, 0.04, 0.6, 0.0003))
FVal <- as.character(c(0.03, 2.51, 1.7, 32.1))
Group <- c("A", "B", "C", "D")
df <- data.frame(Group, FVal, pVal, stringsAsFactors = FALSE)
library(pander)
emphasize.strong.cells(which(df < 0.05, arr.ind = TRUE))
pander(df)
```
这里有两个问题。
首先是 FVal
列中满足标准的值也加粗了。我希望 pVal
列中的值 <.05 加粗 only。我尝试像这样
emphasize.strong.cells
函数中进行子集化
emphasize.strong.cells(which(df$pVal < 0.05, arr.ind = TRUE))
或
emphasize.strong.cells(which(df[,"pVal"] < 0.05, arr.ind = TRUE))
但都没有用。我怀疑发生这种情况是因为以这种方式进行子集化我没有给 emphasize.strong.cells
函数一个具有多个维度的对象,但我不确定如何制作一个对象,其中只有一列是 'active' 作为标准.
第二个问题是 pVal
列中的最后一个元素在最终的 rmarkdown pdf 中没有加粗,我假设是因为转换为科学记数法。
非常感谢任何解决方案。
这个简单的 hack 将为您解决。
df$pVal <- ifelse(df$pVal < 0.05, paste0("**", df$pVal, "**"), df$pVal)
pander(df)
-----------------------
Group FVal pVal
------- ------ --------
A 0.03 0.9
B 2.51 **0.04**
C 1.7 0.6
D 32.1 3e-04
-----------------------
如果将 pVal
更改为 as.numeric
,最终值也会变为粗体。
我认为这是一个 matrix
操作问题,而不是特定于 pander
,因为 emphasize.cells
接受 which(..., arr.ind = TRUE)
返回的 matrix
即如果我对这个问题的理解是正确的,将被过滤到第 3 列。参见例如:
> emphasize.strong.cells(as.matrix(subset(data.frame(which(df < 0.05, arr.ind = TRUE)), col == 3)))
> pander(df)
-----------------------
Group FVal pVal
------- ------ --------
A 0.03 0.9
B 2.51 **0.04**
C 1.7 0.6
D 32.1 3e-04
-----------------------