将标准应用于pander中表的单个列

时间:2016-07-18 03:38:54

标签: subset r-markdown pander

我想应用一个标准,根据该标准,平移表中的单元格是否为粗体。但是,我想将此标准应用于表的单个列而不是其他列。

这是完整的降价文件。

---
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 中将值&lt; .05变为粗体。我尝试在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函数一个具有多个维度的对象,但我不知道如何创建一个像这样的对象,其中只有一列是活跃的&#39;为标准。

第二个问题是pVal列中的最后一个元素在最终的rmarkdown pdf中没有变成粗体,我假设是因为转换为科学记数法。

非常感谢任何解决方案。

2 个答案:

答案 0 :(得分:1)

这个简单的黑客会为你处理它。

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,最终值也会变为粗体。

答案 1 :(得分:1)

我认为这是一个matrix操纵问题而不是pander专用问题,因为emphasize.cells需要matrix返回which(..., arr.ind = TRUE)如果我对这个问题的理解是正确的,则过滤第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  
-----------------------