[英]How to control number of decimal digits in write.table() output?
When working with data (eg, in data.frame) the user can control displaying digits by using在处理数据时(例如,在 data.frame 中),用户可以通过使用来控制显示数字
options(digits=3)
and listing the data.frame like this.并像这样列出 data.frame。
ttf.all
When the user needs to paste the data in Excell like this当用户需要像这样在Excel中粘贴数据时
write.table(ttf.all, 'clipboard', sep='\t',row.names=F)
The digits parameter is ignored and numbers are not rounded. digits 参数被忽略,数字不四舍五入。
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.但是 excel(剪贴板)中的内容不是四舍五入的。 How to control in in write.table()
?如何控制 in write.table()
?
You can use the function format()
as in:您可以使用函数format()
,如下所示:
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. format()
是一个通用函数,它具有许多类的方法,包括 data.frames。 Unlike round()
, it won't throw an error if your dataframe is not all numeric.与round()
不同,如果您的数据框不是全数字的,它不会抛出错误。 For more details on the formatting options, see the help file via ?format
有关格式化选项的更多详细信息,请通过?format
查看帮助文件
Adding a solution for data frame having mixed character
and numeric
columns.为具有混合character
和numeric
列的数据框添加解决方案。 We first use mutate_if
to select numeric
columns then apply the round()
function to them.我们首先使用mutate_if
选择numeric
列,然后对它们应用round()
函数。
# install.packages('dplyr', dependencies = TRUE)
library(dplyr)
df <- read.table(text = "id year V1.x.x V1.y.x ratio1
a 2006 227.11111 645.11111 35.22222
b 2007 639.11111 1645.11111 38.22222
c 2008 1531.11111 3150.11111 48.22222
d 2009 1625.11111 3467.11111 46.22222",
header = TRUE, stringsAsFactors = FALSE)
df %>%
mutate_if(is.numeric, round, digits = 2)
#> id year V1.x.x V1.y.x ratio1
#> 1 a 2006 227.11 645.11 35.22
#> 2 b 2007 639.11 1645.11 38.22
#> 3 c 2008 1531.11 3150.11 48.22
#> 4 d 2009 1625.11 3467.11 46.22
### dplyr v1.0.0+
df %>%
mutate(across(where(is.numeric), ~ round(., digits = 2)))
#> id year V1.x.x V1.y.x ratio1
#> 1 a 2006 227.11 645.11 35.22
#> 2 b 2007 639.11 1645.11 38.22
#> 3 c 2008 1531.11 3150.11 48.22
#> 4 d 2009 1625.11 3467.11 46.22
Created on 2019-03-17 by the reprex package (v0.2.1.9000)由reprex 包(v0.2.1.9000) 创建于 2019-03-17
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.