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 <[email protected]> To: Brian Hobbs <[email protected]> Cc: [email protected] 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 > > ______________________________________________ > [email protected] 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 ______________________________________________ [email protected] 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. ______________________________________________ [email protected] 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.

