[英]How to control number of decimal digits in write.table() output?
在处理数据时(例如,在 data.frame 中),用户可以通过使用来控制显示数字
options(digits=3)
并像这样列出 data.frame。
ttf.all
当用户需要像这样在Excel中粘贴数据时
write.table(ttf.all, 'clipboard', sep='\t',row.names=F)
digits 参数被忽略,数字不四舍五入。
看到不错的输出
> 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
但是 excel(剪贴板)中的内容不是四舍五入的。 如何控制 in write.table()
?
您可以使用函数format()
,如下所示:
write.table(format(ttf.all, digits=2), 'clipboard', sep='\t',row.names=F)
format()
是一个通用函数,它具有许多类的方法,包括 data.frames。 与round()
不同,如果您的数据框不是全数字的,它不会抛出错误。 有关格式化选项的更多详细信息,请通过?format
查看帮助文件
为具有混合character
和numeric
列的数据框添加解决方案。 我们首先使用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
由reprex 包(v0.2.1.9000) 创建于 2019-03-17
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.