首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >readr :关闭write_csv中的科学符号

readr :关闭write_csv中的科学符号
EN

Stack Overflow用户
提问于 2015-05-20 05:40:20
回答 6查看 15.6K关注 0票数 21

我使用R来处理人口普查数据,它使用非常长的数字GEOID来识别地理位置。我面临的问题是,当使用write_csv (从readr包)写出处理过的数据时,它正在用科学的符号编写这些GEOID。有办法绕过这件事吗?

注意:我可以通过将scipen选项设置为足够大的值来切换R控制台上的科学符号显示。但是,这个设置似乎没有扩展到readr库中。

下面是一个玩具数据集:

代码语言:javascript
复制
library(dplyr)
library(readr) # which is the package with write_csv
(tbl_df(data.frame(GEOID = seq(from=60150001022000, to=60150001022005, 1))))
Source: local data frame [6 x 1]

           GEOID
1 60150001022000
2 60150001022001
3 60150001022002
4 60150001022003
5 60150001022004
6 60150001022005

write_csv((tbl_df(data.frame(GEOID = seq(from=60150001022000, to=60150001022005, 1)))), "test.csv")

这就是我现在得到的。我正在寻找一种方法来获得与上面相同的数字:

代码语言:javascript
复制
GEOID
6.02E+13
6.02E+13
6.02E+13
6.02E+13
6.02E+13
6.02E+13
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2017-08-30 11:58:51

我建议对这些列进行编码以键入int,因为如果是这样的话,write_*将不再使用科学数字编码。要一次转换所有数字列(例如,在处理计数矩阵的情况下),您可以这样做:

代码语言:javascript
复制
require(dplyr)    
tbl_df = mutate_if(tbl_df, is.numeric, as.integer)
票数 15
EN

Stack Overflow用户

发布于 2017-10-22 08:46:43

我编写了一个带有补丁的拉请求,以改进对write_csv中科学符号的控制。

使用此修补程序,您将在int_use_scientific=FALSE中使用write_csv参数来解决您的问题。希望它最终能被合并。

票数 8
EN

Stack Overflow用户

发布于 2015-05-20 06:10:26

使用字符值可能更安全:

代码语言:javascript
复制
X <- tbl_df(data.frame(GEOID = as.character(seq(from=60150001022000, to=60150001022005))))

 write_csv(X, "test.csv")

具有讽刺意味的是,write_csv函数确实将部分输出强制转换为字符值,而不是数字列。只有当一个列通过了is.object测试时,它才会被强制使用。似乎没有一个开关可以抛出,以保持最大的精度。write.table及其后代的write.csv函数有几个允许抑制引号和允许定制输出的其他设置的开关,但是write_csv很少有这样的开关。

您可以欺骗write_csv,使其认为数字列更复杂,这确实导致了as.character输出,尽管使用了引号。

代码语言:javascript
复制
 class(X[[1]])<- c("num", "numeric")
 vapply(X, is.object, logical(1))
#GEOID 
# TRUE 

 write_csv(X, "")
#[1] #"\"GEOID\"\n\"60150001022000\"\n\"60150001022001\"\n\"60150001022002\"\n\"60150001022003\"\n\"60150001022004\"\n\"60150001022005\"\n"

作为一个最佳实践,我不同意您的选择,坚持ID变量仍然是数字的。对于对象来说,有太多的暴力可以应用到存储模式中。您不需要对ID变量进行任何算术操作。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30341140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档