dplyr: как читать tsv-файл с заголовками, пропуская некоторые строки?

У меня есть простой файл tsv со следующей структурой:

0 - headerline
1 - empty line
2 - PIG schema
3 - empty line
4 - 1-st line of DATA
5 - 2-nd line of DATA

Я хотел бы прочитать это, возможно, используя readr::read_tsv, но вот проблема.

Как видите, первая строка содержит заголовки. Затем у меня есть три строки, которые я НЕ хочу читать (они содержат очень странные данные, поступающие от Apache PIG), и в строке 4 начинаются данные. В Pandas я бы сделал что-то вроде

df = pd.read_csv('/localpath/data.tsv', sep='\t', skiprows=[1,2,3])

что позволяет мне читать заголовки И и пропускать первую, вторую, третью строки.

Я не вижу подобного варианта в readr::read_tsv. То есть :

df = read_tsv('/localpath/data.tsv', col_names = TRUE, skip = 4)

который не анализирует заголовки...

Любые идеи?


person ℕʘʘḆḽḘ    schedule 17.11.2016    source источник
comment
Может быть, прочитать в первой строке как отдельный объект, а затем прочитать в остальных строках?   -  person bouncyball    schedule 17.11.2016
comment
как бы вы это закодировали? есть ли другие альтернативы с другими пакетами? Я хочу как можно меньше играть с данными   -  person ℕʘʘḆḽḘ    schedule 17.11.2016
comment
использовать обычный read.table ?   -  person rawr    schedule 17.11.2016
comment
спасибо @rawr, но есть ли возможность пропустить эти строки?   -  person ℕʘʘḆḽḘ    schedule 17.11.2016
comment
да, также называется skip   -  person rawr    schedule 17.11.2016
comment
@rawr, похоже, skip не разрешает список или строки? skip integer: the number of lines of the data file to skip before beginning to read data.   -  person ℕʘʘḆḽḘ    schedule 17.11.2016
comment
да, это правда stackoverflow.com/questions/15860071/   -  person rawr    schedule 17.11.2016
comment
спасибо, но предложенное там решение не работает с большими данными. Я думаю, что мне придется пойти с двухэтапными процессами...   -  person ℕʘʘḆḽḘ    schedule 17.11.2016
comment
@bouncyball, не могли бы вы опубликовать свое предложение?   -  person ℕʘʘḆḽḘ    schedule 17.11.2016


Ответы (1)


Публикация моего комментария в качестве ответа. По сути, мы читаем первую строку как наш заголовок, а затем читаем остальные строки как данные:

library(readr)
names_t <- read_tsv('/localpath/data.tsv', col_names = FALSE, n_max = 1)
df1 <- read_tsv('/localpath/data.tsv', col_names = FALSE, skip = 4)
names(df1) <- names_t

Обратите внимание, что в моем комментарии я указал nrows = 1 для чтения в именах (это будет работать для read.csv), но, похоже, этот аргумент заменен на n_max в readr::read_tsv.

person bouncyball    schedule 17.11.2016