2013-07-10 14 views
7

data.table 'un fread işlevi v1.8.9 aracılığıyla R'ye okunan bir sütunu atlayabilmek istiyorum. Fakat okuduğum csv, sütun başlıklarına sahip değil… bu, yaymak için bir problem gibi görünüyor… sadece belirli sütunları istemediğimi belirtmenin bir yolu var mı?R fread colClasses kullanarak veya sütun başlıkları olmadan csv'yi okumak için argümanları atla

Bir sütun adını önceden ayırmak ve ardından atlanabilmesi için okunmasını sağlamak daha iyi olur mu?

...

Ben

http://www.truefx.com/dev/data/2013/MAY-2013/AUDUSD-2013-05.zip

bunu fermuarını aşağıdaki URL'den verilerini indirilen ...

Bir örnek vermek ve fread Ar içine csv okuyun ve hemen hemen sahiptir etmek Sadece csv uzantısı ile aynı dosya adı.

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> 

İlk sütun ... hepsi aynıdır ve gereksiz olduğu gerçeğini görmezden argümanları yeni (imsi) colClasses kullanarak veya atlama çalıştı. yapıyor

ama: colClasses ilk sütunda

içinde okuma ihmal etmez

pp1 <- fread("AUDUSD-2013-05.csv",sep=",",skip=1) 

ve kullanma

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 

diğer girişimler

incude aşağıdaki hataya yol açmaktadır
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> 

Ben hemen hemen aynı ben tam olarak kullanmamış sanki ...

İlk sütunu atlayarak verilerin okunmasını hızlandırabilmek için herhangi bir öneri var mı?

Ayrıca belki de sormak için biraz fazla, ama önce bir zip dosyası ilk önce unzipping ve daha sonra csv okuma yerine doğrudan okumak mümkün mü?

Oh ve belli değildi olsaydı ben data.table v1.8.9 kullanıyorum

Her zaman olduğu gibi önceden yardım, çaba ve tavsiye tümü için teşekkürler.

+0

R genellikle V1, V2 vb. Üzerinde sahip olduğunuz gibi kendi sütun adlarını oluşturur. Yani yukarıdaki gibi bir veri okuyabiliyorsanız, sorunun ne olduğundan emin değilim? Bir listeyi ilan etmeden colClasses = NULL 'yapmayı deneyebilirsiniz. Ayrıca 'colClasses = c (col1, col2, col3, col4, col5)' doldurabilirsiniz ' –

+0

'skip' argümanı sütunları değil satırları atlamakla ilgilidir; Ben bir 'col.skip' argümanı olsaydı, fark edilebilir bir hız iyileşmesi elde ettiğine ikna olmadım - onları terk etmeye karar vermeden önce bu karakterleri okumak zorunda kalacaksınız – eddi

+0

@SanderVanderZeeuw Metodunu denedim .. . ama aşağıdaki hatayı aldım: 'pp <- fread (" AUDUSD-2013-05.csv ", sep =", ", colClasses = c (NULL," character "," sayısal "," sayısal ")) 'Yayılma hatası (" AUDUSD-2013-05.csv ", sep =", ", colClasses = c (NULL," character ",: colClasses adsız ve uzunluk 3 ama 4 sütun var. colClasses argument.' hakkında daha fazla bilgi için data.table @ –

cevap

10

Aradığınız argümanın drop olduğunu düşünüyorum. Deneyin:

require(data.table) # 1.9.2+ 
pp <- fread("AUDUSD-2013-05.csv", drop = 1) 

dikkat edin, eğer ada veya yere göre drop can.

fread("AUDUSD-2013-05.csv", drop = c("columThree","anotherColumnName")) 

fread("AUDUSD-2013-05.csv", drop = 10:15) # read all columns other than 10:15 

Ve ada veya yere göre yapabilirsiniz select de.

fread("AUDUSD-2013-05.csv", select = 10:15) # read only columns 10:15 

fread("AUDUSD-2013-05.csv", select = c("columnA","columnName2")) 

Bu görüşler (Şubat 2014'te CRAN için serbest) v1.9.2 ilave edildi ve ?fread belgelenmiştir. Bunları kullanmak için yükseltmeniz gerekecek.

İlgili konular