R使用fread colClasses或跳过参数以读取没有列标题的csv

问题描述 投票:8回答:1

我希望能够跳过通过v1.8.9中的data.tablefread函数读入R的列。但是我正在阅读的csv没有列标题...这似乎是个问题……是否有一种方法可以指定我不想要特定的列?

最好预先分配一个列名,然后让它读入以便可以跳过它?

举个例子……

我从以下网址下载了数据

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> 

我尝试使用new(ish)colClasses或跳过参数来忽略第一列都是相同的事实,并且是不必要的事实。

但是正在做:

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

一如既往,感谢您预先提供的所有帮助,努力和建议。

r data.table fread import-csv
1个回答
13
投票

我认为您要查找的参数是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中。您需要升级才能使用它们。

© www.soinside.com 2019 - 2024. All rights reserved.