How to control number of decimal digits in write.table() output?

userJT picture userJT · Jan 10, 2013 · Viewed 54.2k times · Source

When working with data (e.g., in data.frame) the user can control displaying digits by using

options(digits=3) 

and listing the data.frame like this.

ttf.all

When the user needs to paste the data in Excell like this

write.table(ttf.all, 'clipboard', sep='\t',row.names=F)

The digits parameter is ignored and numbers are not rounded.

See nice output

> ttf.all
  year V1.x.x V1.y.x ratio1 V1.x.y V1.y.y ratioR V1.x.x V1.y.x ratioAL V1.x.y V1.y.y ratioRL
1 2006    227    645   35.2     67    645   10.4    150    645    23.3     53    645    8.22
2 2007    639   1645   38.8    292   1645   17.8    384   1645    23.3    137   1645    8.33
3 2008   1531   3150   48.6    982   3150   31.2    755   3150    24.0    235   3150    7.46
4 2009   1625   3467   46.9   1026   3467   29.6    779   3467    22.5    222   3467    6.40

But what is in excel (clipboard) is not rounded. How to control in in write.table()?

Answer

MattBagg picture MattBagg · Jan 12, 2013

You can use the function format() as in:

write.table(format(ttf.all, digits=2), 'clipboard', sep='\t',row.names=F)

format() is a generic function that has methods for many classes, including data.frames. Unlike round(), it won't throw an error if your dataframe is not all numeric. For more details on the formatting options, see the help file via ?format