Применение критерия к одному столбцу таблицы в пандере

Я хочу применить критерий, по которому ячейки в сводной таблице выделены жирным шрифтом или нет. Однако я хочу применить этот критерий к одному столбцу таблицы, а не к другим столбцам.

Вот полный документ уценки.

---
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, также выделены жирным шрифтом. Я хочу, чтобы значения ‹.05 были выделены жирным шрифтом в столбце pVal только. Я пробовал подмножество в функции emphasize.strong.cells вот так

emphasize.strong.cells(which(df$pVal < 0.05, arr.ind = TRUE))

or

emphasize.strong.cells(which(df[,"pVal"] < 0.05, arr.ind = TRUE))

Но ни то, ни другое не сработало. Я подозреваю, что это происходит потому, что таким образом я не даю функции emphasize.strong.cells объект с несколькими измерениями, но я не уверен, как сделать такой объект, где только один столбец является «активным» для критерия.

Вторая проблема заключается в том, что последний элемент в столбце pVal не выделен жирным шрифтом в окончательном PDF-файле rmarkdown, я полагаю, из-за преобразования в научное обозначение.

Любые решения высоко ценятся.


person llewmills    schedule 18.07.2016    source источник


Ответы (2)


Я думаю, что это скорее вопрос манипуляции 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  
-----------------------
person daroczig    schedule 18.07.2016
comment
Да, я всегда знал, что это мое непонимание того, как изолировать последний столбец. subset(., col ==3) был именно тем, что мне было нужно. Как всегда, вы были очень полезны @daroczig. - person llewmills; 18.07.2016

Этот простой лайфхак позаботится об этом за вас.

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, конечное значение также будет выделено жирным шрифтом.

person Maiasaura    schedule 18.07.2016
comment
Спасибо @Maiasaura. Очень хороший обходной путь. Я подожду, чтобы увидеть, может ли кто-нибудь дать мне способ сделать то же самое с «внутренней» функцией pander, но это помогло мне обойти проблему в моем документе rmarkdown, поэтому определенно стоит проголосовать. - person llewmills; 18.07.2016