2015-06-30 11 views
12

Tôi có một tập tin csv đơn giản gọi là "test.csv" với các nội dung sau đây:làm thế nào để bỏ qua đọc cột nhất định trong readr

colA,colB,colC 
1,"x",12 
2,"y",34 
3,"z",56 

Hãy nói rằng tôi muốn bỏ qua việc đọc trong cola và chỉ đọc trong colB và colC. Tôi muốn một cách tổng quát để làm điều này bởi vì tôi có rất nhiều tập tin để đọc và đôi khi colA được gọi là cái gì đó hoàn toàn khác nhưng colB và colC luôn giống nhau.

Theo tài liệu read_csv, một cách để thực hiện điều này là để thông qua một danh sách tên cho col_types và chỉ tên các cột mà bạn muốn giữ:

read_csv('test.csv', col_types = list(colB = col_character(), colC = col_numeric())) 

Bằng không nhắc đến Cola nó nên được giảm từ đầu ra. Tuy nhiên, khung dữ liệu kết quả là:

Source: local data frame [3 x 3] 

     colA colB colC 
    1 1 x 12 
    2 2 y 34 
    3 3 z 56 

Tôi có làm gì sai hoặc tài liệu read_csv không chính xác không? Theo tệp trợ giúp:

Nếu danh sách, danh sách phải chứa một "bộ thu" cho mỗi cột. Nếu bạn chỉ muốn đọc một tập con của các cột, bạn có thể sử dụng danh sách có tên (trong đó tên đặt tên cột). Nếu một cột không được đề cập theo tên, cột đó sẽ không được đưa vào đầu ra.

+2

'' fread' data.table' của có 'drop' và 'chọn' đối số cho mục đích này, để tham khảo – MichaelChirico

+2

@jaap, KHÔNG trùng lặp. Câu hỏi này là về readr :: read_csv() và câu hỏi khác là về utils :: read.table(). – Angelo

+0

@Angelo Đúng vậy. Câu hỏi được liên kết là đọc số lượng cột giới hạn. Tại thời điểm viết câu hỏi đó, 'readr :: read_csv' thậm chí không tồn tại. Trong thời gian đó, nó đã được thêm vào như một câu trả lời (bởi tôi) để đưa ra các cách tiếp cận thay thế cho 'read.table' /' read.csv' và do đó có thể phục vụ như một mục tiêu trùng lặp. – Jaap

Trả lời

6

Có một câu trả lời trên mạng, tôi chỉ không tìm kiếm khó khăn đủ: https://github.com/hadley/readr/issues/132

Rõ ràng đây là một vấn đề tài liệu đã được sửa chữa. Chức năng này cuối cùng có thể được thêm vào nhưng Hadley nghĩ rằng nó hữu ích hơn để có thể chỉ cập nhật một loại cột và không thả các loại khác.

+0

do đó câu trả lời chính xác hiện tại ngắn là: KHÔNG? – userJT

+0

Câu trả lời vẫn là "không" ngay cả sau khi đọc 1.0 phát hành. Xem https://github.com/hadley/readr/issues/194 – vergilcw

1

"Theo tài liệu read_csv, một cách để thực hiện điều này là để thông qua một danh sách tên cho col_types và chỉ tên các cột mà bạn muốn giữ lại"

WRONG: read_csv('test.csv', col_types=list(colB='c', colC='c')) 

Không, doc là sai lầm, bạn phải thể chỉ định rằng cols giấu tên nhận được giảm xuống (lớp '_' hoặc col_skip()), nếu không chỉ định rõ ràng lớp học của họ như NULL:

read_csv('test.csv', col_types=list('*'='_', colB='c', colC='c')) 

read_csv('test.csv', col_types=list('colA'='_', colB='c', colC='c')) 
Các vấn đề liên quan