Как прочитать файл с фиксированной шириной, зная имена столбцов, но не ширину?

Недавно я столкнулся с проблемой, когда у нас был файл фиксированной ширины. Например -

Name   Income
John   $10,000
Mary   $15,000
Walter $25,000

Как читать файлы с фиксированной шириной, используя только имена столбцов?


person Slayer    schedule 05.04.2019    source источник
comment
Спасибо, что задали вопрос, на который знали ответ!   -  person Gregor Thomas    schedule 06.04.2019
comment
Я столкнулся с этим сегодня на работе, я подумал, что должен выложить это в мир, чтобы каждый мог извлечь из этого пользу в какой-то момент.   -  person Slayer    schedule 06.04.2019
comment
Не пытайтесь работать с файлами переменной ширины. fwf_empty будет искать постоянную ширину, это даст плохие результаты, если не будет согласованной ширины. Если вам нужно прочитать файл с разделителями, где вы не знаете разделитель, data.table::fread обычно хорошо угадывает.   -  person Gregor Thomas    schedule 06.04.2019
comment
data.table::fread это очень круто. Но моя проблема не была решена с его помощью. Поэтому я немного исследовал этот фронт.   -  person Slayer    schedule 06.04.2019


Ответы (1)


Чтобы решить эту проблему, я наткнулся на readr функцию read_fwf(), которая принимает имя файла в качестве аргумента и другой аргумент fwf_empty(), указывающий, будет ли ширина исправления угадываться или нет.

Скажем, имя моего файла fixed_width_file.csv, и у меня миллион строк. Я бы прочитал файл, просто используя имена столбцов.

library(readr)
read_fwf("fixed_width_file.csv",
         fwf_empty("fixed_width_file.csv", 
         col_names = c("Name", "Income")),
         skip = 1)

Убедитесь, что столбцы выровнены, посмотрев на заголовок файла data.frame.

Я обновлю ответ, когда узнаю больше.

person Slayer    schedule 05.04.2019