2014-12-23 4 views
12

Я пытаюсь напечатать таблицу в knitr из фрейма данных с помощью xtable. Таблица в примере ниже имеет размеры 3x7, но третья строка имеет только одно значение во втором столбце. Остальные ячейки в третьем ряду - «NA».Скрытие NA при печати DataFrame в knitr

Когда я скомпилирую документ, есть ли способ предотвратить публикацию ниттера от печати NA в третьей строке, поэтому вместо NA у меня просто пустое пространство?

Похоже, это должно быть простым решением, но я не могу решить, где и как скрыть НС. Является ли это изменением, которое мне нужно сделать в кадре данных, или это вариант xxtable или 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

Вы можете попробовать 'печати (xFTable, na.print =«»)' Вы, возможно, придется использовать 'print.default' или другой метод печати для печати документ. Но 'na.print' появляется в нескольких методах печати –

+0

Или, если вы довольны таблицами« markdown »вместо LaTeX, вы можете использовать [' pander'] (http://rapporter.github.io/pander/ # markdown-tables), где вы можете указать, как печатать 'NA' с аргументом 'missing' или [global option] (http://rapporter.github.io/pander/#general-options). – daroczig

+0

Спасибо за предложение, но я пробовал распечатать (xFTable, na.print = "") без каких-либо успехов. Я не нашел na.print в документации xtable. – 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

You может установить опцию 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

Смежные вопросы