2014-12-23 54 views
12

我試圖用xtable在數據框中的knitr中打印表格。下例中的表格的尺寸爲3x7,但第三行只有一個值,位於第二列。第三行其餘的單元格是'NA'。在knitr中打印數據幀時隱藏NA's

當我編譯文檔時,是否有辦法防止knitr在第三行打印NA,所以不是NA,而只是有空格?

感覺這應該是一個簡單的解決方案,但我不知道在哪裏/如何隱藏NA。這是我需要對數據框做出的改變,還是我需要改變的xtable或knitr選項?

樣品knitr代碼:

\documentclass{article} 

<< data1, echo=FALSE, warning=FALSE, message=FALSE >>= 

require(xtable) 

    FY.2014 <- 0.019 
    FY.2015 <- ((7000) - (6925.9))/(6925.9) 
    FY.2016 <- ((8000) - (7000)) /(7000) 
    FY.2017 <- ((9000) - (8000)) /(8000) 
    FY.2018 <- ((10000) - (9000)) /(9000) 
    FY.2019 <- ((11000) - (10000))/(10000) 

    PC  <- data.frame(FY.2014, FY.2015, FY.2016, FY.2017, FY.2018, FY.2019) 
    PC.1 <- paste(round(PC*100, digits=1), "%", sep="") 


FY.2014 <- 130.1 
FY.2015 <- 7000 - 6925.9 
FY.2016 <- 8000 - 7000 
FY.2017 <- 9000 - 8000 
FY.2018 <- 10000 - 9000 
FY.2019 <- 11000 - 10000 

AB  <- data.frame(FY.2014, FY.2015, FY.2016, FY.2017, FY.2018, FY.2019) 
AB.1 <- paste(round(AB , digits = 2)) 


    FY.2014 <- as.numeric(c("")) 
    FY.2015 <- 7242.9 
    FY.2016 <- as.numeric(c("")) 
    FY.2017 <- as.numeric(c("")) 
    FY.2018 <- as.numeric(c("")) 
    FY.2019 <- as.numeric(c("")) 

    PF  <- data.frame(FY.2014, FY.2015, FY.2016, FY.2017, FY.2018, FY.2019) 
    PF.1 <- paste(round(PF , digits = 2)) 

    FTable <- rbind(PC.1, AB.1, PF.1) 

     rownames(FTable) <- c('Percent Change from the Previous Year', 
          'Absolute Change from Previous Year', 
          'December CY13 Forecast') 
     colnames(FTable) <- c('FY 2014', 'FY 2015', 'FY 2016', 'FY 2017', 'FY 2018', 'FY 2019') 

@ 

\begin{document} 
<<Table 1 , echo=FALSE, eval=TRUE, results='asis', fig.width = 5, fig.height = 2,  message=FALSE, fig.align='center', warning=FALSE>>= 

      xFTable <- xtable(FTable, big.mark=",") 

      print(xFTable) 
@ 
\end{document} 
+1

您可以嘗試'print(xFTable,na.print =「」)'您可能需要使用'print.default'或其他打印方法來打印文檔。但'na.print'出現在相當多的打印方法中 –

+0

或者如果您對使用'markdown'表而非LaTeX感到滿意,那麼您可以使用['pander'](http://rapporter.github.io/pander/ #markdown-tables)您可以在其中指定如何使用'missing'參數或[全局選項](http://rapporter.github.io/pander/#general-options)打印'NA'。 – daroczig

+0

感謝您的建議,但我嘗試打印(xFTable,na.print =「」)沒有任何成功。我在xtable文檔中找不到na.print。 – Matt

回答

4

我使用的技巧是有點蠻力,但它似乎工作(在我的使用情況,這是):

out <- knitr::kable(...) 
cat(gsub('\\bNA\\b', ' ', out), sep='\n') 
+0

我想'\\ bNA \\ n''應該是''\\ bNA \\ b''? – YvanR

+0

鑑於'knitr'的最近更改,此答案不應再相關。我建議使用@ svannoy的答案。 – r2evans

+0

在我的情況下(針對pdf),它變得非常有用,因爲「更新」的解決方案無效 - 謝謝! – Will

21

你可以爲空白或任何你想要的字符設置knitr選項knitr.kable.na =''''。

```{r echo=FALSE, results='asis'} 
    options(knitr.kable.NA = '') 
    knitr::kable(lowerTri, digits=2) 
``` 
+0

你在哪裏設置它?它不適合我。它是'knitr.kable.na'還是'knitr.kable.NA'?你使用簡單還是雙引號? – Costin

+2

@Costin,我添加了上下文,我把它放在一個代碼塊中。 – svannoy

+2

您需要使用'knitr'版本1.15或以上版本:https://github.com/yihui/knitr/releases/tag/v1.15。 – Matt