2016-07-18 3 views
1

Ich möchte ein Kriterium anwenden, nach dem Zellen in einer Pendeltabelle fett dargestellt werden oder nicht. Ich möchte dieses Kriterium jedoch auf eine einzelne Spalte der Tabelle und nicht auf andere Spalten anwenden.Anwenden eines Kriteriums auf eine einzelne Spalte einer Tabelle in pander

Hier ist das vollständige Abschriften-Dokument.

--- 
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) 
``` 

Hier gibt es zwei Probleme.

Erstens ist die Tatsache, dass die Werte, die das Kriterium in der Spalte FVal erfüllen, auch fett dargestellt. Ich möchte die Werte < .05 fett in der pVal Spalte nur gemacht. Ich habe versucht, subsetting in der emphasize.strong.cells Funktion wie so

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

oder

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

Aber weder gearbeitet. Ich vermute, dass dies geschieht, weil ich auf diese Weise die Funktion emphasize.strong.cells nicht einem Objekt mit mehreren Dimensionen gebe, aber ich bin mir nicht sicher, wie man ein Objekt wie dieses erzeugt, wenn nur eine Spalte für das Kriterium 'aktiv' ist.

Das zweite Problem ist, dass das letzte Element in der pVal Spalte nicht fett in der endgültigen rmarkdown pdf gemacht wird, nehme ich wegen der Umwandlung in wissenschaftliche Notation.

Alle Lösungen sehr geschätzt.

Antwort

1

Ich denke, das ist eher eine matrix Manipulation Frage eher als spezifisch für pander, wie emphasize.cells ein matrix von which(..., arr.ind = TRUE) zurücknimmt, die für die dritte Säule gefiltert werden soll, wenn mein Verständnis auf diese Frage richtig ist. Siehe zB:

> 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 
----------------------- 
+0

Ja, ich wusste immer, dass ich nicht verstand, wie ich die letzte Spalte isolieren sollte. Die Untermenge (., Col == 3) war genau das, was ich brauchte. Wie immer warst du @daroczig sehr hilfsbereit. – llewmills

1

Dieser einfache Hack wird sich darum kümmern.

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 
----------------------- 

Wenn Sie die pVal-as.numeric ändern, wird der Endwert auch fett gemacht werden.

+0

Vielen Dank an @Maiasaura. Ein sehr schöner Workaround. Ich werde warten, um zu sehen, ob jemand mir eine Möglichkeit geben kann, das gleiche mit der "In-House" -Pander-Funktion zu tun, aber es brachte mich um das Problem in meinem Rmarkdown-Dokument so definitiv eine Aufwertung wert. – llewmills

Verwandte Themen