fread in R将一个大的.csv文件作为一行数据框导入

时间:2014-03-11 04:06:00

标签: r import data.table

我正在将一个大的.csv文件导入R(大约50万行),所以我一直在尝试使用data.table包中的fread()作为read.table()和read的快速替代方法.CSV()。但是,fread()返回一个数据框,其中包含一行内行中的所有数据,即使它具有正确的列数。我发现2013年的错误报告显示这与integer64数据类有关:

http://r-forge.r-project.org/tracker/index.php?func=detail&aid=2786&group_id=240&atid=975

是否有任何修复或方法可以解决这个问题?

我正在尝试读取的.csv文件是完全整数,范围从0到10000,没有丢失的数据。我在Windows 7计算机上使用R版本2.15.2,版本1.8.8的data.table包。

我正在运行的代码是:

require(data.table)
fread("pre2012_alldatapoints.csv", sep = ",", header= TRUE)-> pre
head(pre)

1: 1 22 -105 22 -105
2: 2 22 -105 22 -105
3: 3 20 -105 20 -105
4: 4 21 -105 21 -105
5: 5 21 -105 21 -105
6: 6 21 -105 21 -105

dim(pre)
[1] 12299  5 #dim returns the correct number of dimensions
#this is a subset of the file I want to import that I've confirmed imports correctly with read.csv

pre[,1]
[1] 1 #but trying to print a column returns this

length(pre[,1])
[1] 1 #and length for any column returns a row length of 1

非常感谢你的帮助!

1 个答案:

答案 0 :(得分:8)

fread创建data.tabledata.table包附带了许多小插曲。

您的准确问题在data.table FAQ的常见问题解答1.1中得到解决 - 这是第一个常见问题解答!

默认情况下,[.data.table的第二个争论是在data.table范围内评估的表达式

因此pre[,1]评估1范围内的pre1仍为1。如果您想要按列号引用,请使用with=FALSE pre[,1,with=FALSE]