Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

kable displays different number of digits in each column

Tags:

r

digits

knitr

I am using kable with the knit to Word functionality at work. I find that I often have simple tables with counts as the first column and then a few columns with proportions. I'd like the count column to be rounded to the nearest digit and the other columns to the nearest hundredth. I've tried using the digits = c(0,2,2) argument within the kable() command, but it still displays two digits for the count, even though it is rounding to the nearest digit.

like image 721
user3866200 Avatar asked Jul 22 '14 20:07

user3866200


People also ask

What is kable() in r?

kable() is a method in R designed to generate a table against the given input. It is a part of the knitr package, which should be installed in the R environment for the kable method to run.

What package is Kable in R?

Function 'kable()' is a light weight table generator coming from 'knitr'. This package simplifies the way to manipulate the HTML or 'LaTeX' codes generated by 'kable()' and allows users to construct complex tables and customize styles using a readable syntax.


2 Answers

I do not see the problem here.

> knitr::kable(as.data.frame(matrix(rnorm(12), 4)), digits = c(0, 2, 2))


| V1|    V2|    V3|
|--:|-----:|-----:|
| -1|  2.11| -0.54|
|  0| -0.33|  0.95|
| -1| -1.14| -0.96|
|  0|  1.45| -0.93|
> sessionInfo()
R version 3.1.1 (2014-07-10)
Platform: x86_64-pc-linux-gnu (64-bit)

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C               LC_TIME=en_US.UTF-8       
 [4] LC_COLLATE=en_US.UTF-8     LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
 [7] LC_PAPER=en_US.UTF-8       LC_NAME=C                  LC_ADDRESS=C              
[10] LC_TELEPHONE=C             LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
[1] evaluate_0.5.5 formatR_0.10.5 knitr_1.6   stringr_0.6.2  tools_3.1.1   
like image 80
Yihui Xie Avatar answered Sep 28 '22 08:09

Yihui Xie


A quick example with pander:

> df <- data.frame(a = 1:5, b = runif(5), c = runif(5))
> library(pander)
> pander(df)

------------------
 a    b       c   
--- ------ -------
 1  0.5949 0.4595 

 2  0.7645 0.5012 

 3  0.7755 0.6024 

 4  0.818  0.01271

 5  0.4329 0.7588 
------------------

> panderOptions('digits', 2)
> pander(df)

--------------
 a   b     c  
--- ---- -----
 1  0.59 0.46 

 2  0.76  0.5 

 3  0.78  0.6 

 4  0.82 0.013

 5  0.43 0.76 
--------------

This is what you need?

like image 20
daroczig Avatar answered Sep 28 '22 06:09

daroczig