我希望能够跳过在v1.8.9中通过data.table
的fread
函数读取到R中的列。但是我正在读取的csv没有列标题…,这对于fread来说似乎是一个问题……有没有一种方法可以只指定我不需要特定的列?
如果只是预先分配一个列名,然后让它读入它,这样就可以跳过它,会不会更好?
为了给出一个例子,我从以下URL下载了数据
http://www.truefx.com/dev/data/2013/MAY-2013/AUDUSD-2013-05.zip
解压后的…
并使用fread将csv读取到R中,它具有几乎相同的文件名,只是扩展名为csv。
system.time(pp <- fread("AUDUSD-2013-05.csv",sep=","))
user system elapsed
16.427 0.257 16.682
head(pp)
V1 V2 V3 V4
1: AUD/USD 20130501 00:00:04.728 1.03693 1.03721
2: AUD/USD 20130501 00:00:21.540 1.03695 1.03721
3: AUD/USD 20130501 00:00:33.789 1.03694 1.03721
4: AUD/USD 20130501 00:00:37.499 1.03692 1.03724
5: AUD/USD 20130501 00:00:37.524 1.03697 1.03719
6: AUD/USD 20130501 00:00:39.789 1.03697 1.03717
str(pp)
Classes ‘data.table’ and 'data.frame': 4060762 obs. of 4 variables:
$ V1: chr "AUD/USD" "AUD/USD" "AUD/USD" "AUD/USD" ...
$ V2: chr "20130501 00:00:04.728" "20130501 00:00:21.540" "20130501 00:00:33.789" "20130501 00:00:37.499" ...
$ V3: num 1.04 1.04 1.04 1.04 1.04 ...
$ V4: num 1.04 1.04 1.04 1.04 1.04 ...
- attr(*, ".internal.selfref")=<externalptr>
我尝试使用新的(Ish) colClasses或skip参数来忽略第一列都是相同的…这一事实而且是不必要的。
但要做的是:
pp1 <- fread("AUDUSD-2013-05.csv",sep=",",skip=1)
不会省略第一列的读入
使用colClasses会导致以下错误
pp1 <- fread("AUDUSD-2013-05.csv",sep=",",colClasses=list(NULL,"character","numeric","numeric"))
Error in fread("AUDUSD-2013-05.csv", sep = ",", colClasses = list(NULL, :
colClasses is type list but has no names
其他尝试也包括在内
pp1 <- fread("AUDUSD-2013-06.csv",sep=",", colClasses=c(V1=NULL,V2="character",V3="numeric",V4="numeric"))
str(pp1)
Classes ‘data.table’ and 'data.frame': 5524877 obs. of 4 variables:
$ V1: chr "AUD/USD" "AUD/USD" "AUD/USD" "AUD/USD" ...
$ V2: chr "20130603 00:00:00.290" "20130603 00:00:00.291" "20130603 00:00:00.292" "20130603 00:00:03.014" ...
$ V3: num 0.962 0.962 0.962 0.962 0.962 ...
$ V4: num 0.962 0.962 0.962 0.962 0.962 ...
- attr(*, ".internal.selfref")=<externalptr>
也就是说,就像我没有使用过colClasses一样…
有什么建议可以通过省略第一列来加快数据的读取速度吗?
也许还有一点疑问,但是否可以直接读取zip文件,而不是先解压缩,然后在csv中读取?
哦,如果不清楚的话,我使用的是data.table v1.8.9
发布于 2014-07-11 12:41:24
我想你要找的参数是drop
。尝试:
require(data.table) # 1.9.2+
pp <- fread("AUDUSD-2013-05.csv", drop = 1)
请注意,您可以按名称或位置执行drop
。
fread("AUDUSD-2013-05.csv", drop = c("columThree","anotherColumnName"))
fread("AUDUSD-2013-05.csv", drop = 10:15) # read all columns other than 10:15
你也可以通过名字或者职位来进行select
。
fread("AUDUSD-2013-05.csv", select = 10:15) # read only columns 10:15
fread("AUDUSD-2013-05.csv", select = c("columnA","columnName2"))
这些参数被添加到v1.9.2 (2014年2月发布到CRAN ),并记录在?fread
中。您需要升级才能使用它们。
https://stackoverflow.com/questions/17567073
复制相似问题