【发布时间】:2016-05-19 15:09:00
【问题描述】:
我正在尝试使用不同的包来找到最适合快速保存数据文件(例如 csv 文件)的包。
我找到了 'iotools' 包和方法 'write.csv.raw' 可以很好地保存有关时间流逝的数据。
但是保存的文件中的数据集有一些有争议的特性:
- 没有列名;
- double/float 数字带有小数点符号“.”但不是用 "," 。
所以我需要将文件中的数据集保存为包含列名和正确的十进制符号。
我的脚本如下:
library(iotools)
library(UsingR)
data(galton)
head(galton)
#option1 to save data
write.csv.raw(galton,"test.csv",append=FALSE,sep=";",col.names=TRUE)
#option2 to save data
write.table.raw(galton,"test.csv",append=FALSE,sep=";",col.names=TRUE)
read.csv2("test.csv",nrow=5)
输入数据集(来自 R):
child parent
61.7 70.5
61.7 68.5
61.7 65.5
61.7 64.5
61.7 64.0
62.2 67.5
输出文件:
X1.61.7 X70.5
2\t61.7 68.5
3\t61.7 65.5
4\t61.7 64.5
5\t61.7 64
6\t62.2 67.5
16 年 2 月 18 日更新:
在 procrastinator0 的回答的帮助下,我设法以正确的方式使用了“write.csv.raw”。
根据问题部分的数据框比较不同的写入方法如下:
system.time(write.csv.raw(n,"test.csv",sep=";",append=TRUE))
用户系统已过
15.61 1.17 21.92system.time(write.table(n,"test.csv",sep=";",row.names=FALSE,dec=","))
用户系统已过
63.25 1.20 64.60system.time(write.csv2(n,"test.csv",row.names=FALSE))
用户系统已过 63.71 1.28 65.38system.time(write_csv(n, "test.csv", na = "NA")) 用户系统已过
136.75 3.60 141.24
27/04/16 更新:(已过期)
我已经做了一些实验来写入/读取数据(不同的工具)。实验基于理论样本和真实样本(来自我的实践)。我试图制作可重现的脚本。希望它们对新手有用:-)
IO 实验链接:
从文件中读取数据:https://rpubs.com/demydd/166375
将数据写入文件:https://rpubs.com/demydd/170957
16 年 9 月 19 日更新:
添加羽毛包(read_feather,write_feather)
fwrite 是从 data.table 包中添加的。
更新测试的链接:
【问题讨论】:
-
问题不清楚,说没有列,但用
col.names=TRUE写出来。数据没有争议,有什么问题? -
了解(大致)您尝试写入的真实数据的维度也会很有趣。
-
@zx8754:我的意思是保存的文件中的数据集。如果我打开文件,我看不到列名和小数点符号“。”代替“,”。 @ docendo discimus:初始数据集是 386000 行和 140 列(数字和非数字)。在应用程序“write.csv.raw”之后,我没有 colnames 和正确的十进制符号。之后我开始测试诸如高尔顿之类的微小样本。
-
write.csv.raw比write_csv{readr}快吗?您的问题是哪种方法是编写.csv文件的最快方法,对吧? -
@Rafael Pereira 你是真的。我正在寻找以正确方式编写 csv 的最快方法。根据我的测试,到目前为止,最快的方法是 fread() 和 write.csw.raw()。但我还没有测试 write_csv{readr}。如果你能提供更好的东西 - 非常欢迎你:-)