2013-07-10 8 views
7

Tôi muốn có thể bỏ qua một cột được đọc vào R thông qua chức năng fread trong v1.8.9. Nhưng các csv tôi đang đọc, không có tiêu đề cột ... mà dường như là một vấn đề cho fread ... là có một cách để chỉ định rằng tôi không muốn cột cụ thể?R sử dụng fread colClasses hoặc bỏ qua đối số để đọc csv không có tiêu đề cột

Sẽ tốt hơn nếu chỉ phân bổ trước tên cột và sau đó để nó đọc nó để nó có thể bị bỏ qua?

Để đưa ra một ví dụ ...

Tôi tải về các dữ liệu từ URL sau

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

giải nén nó ...

và đọc csv vào R sử dụng fread và nó có khá nhiều cùng tên tệp chỉ với phần mở rộng 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> 

Tôi đã thử sử dụng colClasses (bỏ qua) mới hoặc bỏ qua đối số để bỏ qua thực tế là cột đầu tiên giống nhau… và không cần thiết.

nhưng làm:

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

không bỏ qua việc đọc trong của cột đầu tiên

và sử dụng colClasses dẫn đến các lỗi sau

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 

nỗ lực khác incude

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> 

có khá nhiều chính xác giống như nếu tôi không sử dụng colClasses ...

Có đề xuất nào để tăng tốc độ đọc dữ liệu bằng cách bỏ cột đầu tiên không?

Cũng có thể hơi hỏi một chút, nhưng có thể đọc trực tiếp tệp zip thay vì giải nén tệp đầu tiên và sau đó đọc trong csv không?

Oh và nếu nó không phải là rõ ràng tôi đang sử dụng v1.8.9 data.table

Như mọi khi, cảm ơn vì tất cả sự giúp đỡ của bạn, công sức và tư vấn trước.

+0

R thường tạo tên cột riêng như bạn có trên V1, V2 vv Vì vậy, nếu bạn có thể đọc trong dữ liệu như trên, tôi không chắc vấn đề là gì? Bạn có thể thử 'colClasses = NULL' mà không khai báo danh sách của nó. bạn cũng có thể điền vào các tham số 'colClasses = c (col1, col2, col3, col4, col5)' –

+0

'skip' là về bỏ qua các hàng không cột; Tôi không tin rằng đã có một đối số 'col.skip', bạn sẽ nhận được một cải thiện tốc độ đáng chú ý - bạn vẫn phải đọc trong những ký tự đó trước khi quyết định từ bỏ chúng – eddi

+0

@SanderVanderZeeuw Tôi đã thử phương pháp của bạn .. . nhưng có lỗi sau: 'pp <- fread (" AUDUSD-2013-05.csv ", sep =", ", colClasses = c (NULL," ký tự "," số "," số ")) ' ' Lỗi trong fread ("AUDUSD-2013-05.csv", sep = ",", colClasses = c (NULL, "ký tự",: colClasses không có tên và chiều dài 3 nhưng có 4 cột. data.table để biết thêm thông tin về đối số colClasses.' –

Trả lời

10

Tôi nghĩ đối số bạn đang tìm kiếm là drop. Hãy thử:

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

Lưu ý rằng bạn có thể drop theo tên hoặc vị trí.

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

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

Và bạn cũng có thể select theo tên hoặc vị trí.

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

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

Các đối số này đã được thêm vào v1.9.2 (được phát hành cho CRAN vào tháng 2 năm 2014) và được ghi lại trong ?fread. Bạn sẽ cần phải nâng cấp để sử dụng chúng.