2015-06-30 17 views
12

Mam prostego pliku csv nazwie „test.csv” o następującej treści:jak pominąć czytając niektóre kolumny w readr

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

Powiedzmy, że chcesz pominąć czytanie w Cola i po prostu czytać w colB i colC. Chcę zrobić to ogólnie, ponieważ mam dużo plików do odczytu, a czasami colA jest nazywane czymś zupełnie innym, ale colB i colC są zawsze takie same.

Zgodnie z dokumentacją read_csv, jednym ze sposobów osiągnięcia tego celu jest zdać nazwie listy dla col_types i tylko nazwa kolumny, które chcesz zachować:

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

By nie wspomnieć Cola powinna zrzucane z wydajność. Jednakże uzyskany ramka danych jest:

Source: local data frame [3 x 3] 

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

robię coś źle lub jest dokumentacja read_csv nie jest prawidłowy? Zgodnie z plikiem pomocy:

Jeśli lista, musi zawierać jeden "kolektor" dla każdej kolumny. Jeśli chcesz odczytywać tylko podzbiór kolumn, możesz użyć nazwanej listy (gdzie nazwy podają nazwy kolumn). Jeśli kolumna nie jest wymieniona pod nazwą , nie zostanie uwzględniona w danych wyjściowych.

+2

'fread' data.table' zawiera' drop' i Argumenty 'select' w tym celu, dla odniesienia – MichaelChirico

+2

@ jaap, NIE duplikatu. To pytanie dotyczy readr :: read_csv(), a inne pytanie dotyczy utils :: read.table(). – Angelo

+0

@ Angelo Tak to jest. Powiązane pytanie dotyczy odczytu ograniczonej liczby kolumn. W chwili pisania tego pytania, 'readr :: read_csv' nawet nie istniało. W międzyczasie została ona dodana jako odpowiedź (przeze mnie) na alternatywne podejście do 'read.table' /' read.csv' i dlatego może służyć jako duplikat celu. – Jaap

Odpowiedz

6

Jest odpowiedź tam, ja po prostu nie szukaj na tyle twardy: https://github.com/hadley/readr/issues/132

Widocznie był to problem, że dokumentacja została poprawiona. Ta funkcjonalność może ostatecznie zostać dodana, ale Hadley uznał, że bardziej użyteczna jest możliwość zaktualizowania tylko jednego typu kolumny, a nie upuszczenia pozostałych.

+0

, więc krótką poprawną bieżącą odpowiedzią jest: NIE? – userJT

+0

Odpowiedź jest nadal "nie", nawet po czytniku 1.0 wydanie. Zobacz https://github.com/hadley/readr/issues/194 – vergilcw

1

„Zgodnie z dokumentacją read_csv, jednym ze sposobów osiągnięcia tego celu jest zdać nazwie listy dla col_types i tylko nazwa kolumny, które chcesz zachować”

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

Nie, doc jest mylące, trzeba też określić, że nienazwane cols zrzucane (klasa „_” lub col_skip()), albo jednoznacznie określić swoją klasę jako NULL:

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

read_csv('test.csv', col_types=list('colA'='_', colB='c', colC='c')) 
Powiązane problemy