[R] Formatting digits in a table with mix of numbers and characters

arun smartpink111 at yahoo.com
Thu Nov 8 19:18:22 CET 2012


Hi,

You can also use formatC().
table[]<-ifelse(!is.na(as.numeric(tab1)),formatC(as.numeric(table),format="fg",width=4),table)
#warnings will be present 
 table
#     [,1]    [,2]    [,3]  
#[1,] "12.35" "--"    "  10"
#[2,] "12.35" "--"    "NA"  
#[3,] "--"    "123.5" "--"  
A.K.







----- Original Message -----
From: David Winsemius <dwinsemius at comcast.net>
To: Brian Hobbs <brhobbs at gmail.com>
Cc: r-help at r-project.org
Sent: Thursday, November 8, 2012 12:40 PM
Subject: Re: [R] Formatting digits in a table with mix of numbers and characters


On Nov 8, 2012, at 8:14 AM, Brian Hobbs wrote:

> Hello,
> 
> I am currently trying to find an easy way to take a table with a mix
> of numbers and characters and format the numbers in the table to be
> constrained to 4 significant digits.
> 
> Example:
> 
> #this is my table creation
>> table <- matrix(c(12.34567, "--", 10, 12.34567, "--", "NA", "--", 123.45678,  "--"), ncol = 3, byrow=TRUE)
>> 
>> table
>     [,1]       [,2]        [,3]
> [1,] "12.34567" "--"        "10"
> [2,] "12.34567" "--"        "NA"
> [3,] "--"       "123.45678" "--"
> 
> #I would like for it to be
>     [,1]       [,2]        [,3]
> [1,] "12.35"   "--"        "10"
> [2,] "12.35"   "--"        "NA"
> [3,] "--"       "123.5"     "--"

Appears from your desired output that your interpretation of "significant digits differs from that of the format function's implementation. (See below)
> 
> I am using the "xtable" package and attempt to use the digits()
> argument within xtable; however, this did not format the numbers,
> likely because my table was forced to character values when I created
> it using matrix(). I am not bothered by the character values in my
> final xtable result; however...
> 
> I have two questions:
> 1) Is there a better way to create my table so that the original
> numeric values are not forced to characters prior to transfer to
> xtable?

I cannot think of any at the moment.


> 2) Aside from using signif() or round() on each numeric element within
> my matrix as I create the variable "table", is there a way to get my
> numeric elements to have 4 significant figures prior to be manipulated
> by xtable()?

Not sure. 

> table <- matrix(c(12.34567, "--", 10, 12.34567, "--", "NA", "--", 123.45678,  "--"), ncol = 3, byrow=TRUE)
> table[] <- ifelse(!is.na(as.numeric(table)), format(as.numeric(table),digits=4), table)
Warning messages:
1: In ifelse(!is.na(as.numeric(table)), format(as.numeric(table), digits = 4),  :
  NAs introduced by coercion
2: In format(as.numeric(table), digits = 4) : NAs introduced by coercion
> table
     [,1]     [,2]     [,3]    
[1,] " 12.35" "--"     " 10.00"
[2,] " 12.35" "--"     "NA"    
[3,] "--"     "123.46" "--"    

-- 
David.




> 
> 
> 
> Environment: R Studio 0.96.331
> R version: 64-bit 2.15.2
> 
> 
> Thank you for the help,
> Brian Hobbs
> Pulmonary and Critical Care Fellow
> Harvard Combined Program
> 
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.

David Winsemius, MD
Alameda, CA, USA

______________________________________________
R-help at r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.





More information about the R-help mailing list