R: прочитать файл fwf с отсутствующим последним столбцом - PullRequest
0 голосов
/ 08 января 2020

Я пытаюсь проанализировать файлы .txt фиксированной ширины с readr read_fwf. Есть ~ 1,5 миллиона наблюдений и ок. 550 из них не хватает последних 25 из 60 переменных. Это упущение приводит к неправильному анализу последней переменной, которую имеют эти наблюдения, «описание» в примере ниже, и оставляет кадр данных без этих частично заполненных столбцов.

Например,

df_baseline <- read_fwf(file = file, fwf_widths(fwf_widths, fwf_names), 
                         col_types = col_types, trim_ws = T) %>% 
   mutate_all(na_if, "")
Warning: 1148 parsing failures.
row         col   expected     actual file
300495 description 240 chars  102        '/path/to/my/file/filename.txt'
300495 NA          59 columns 31 columns '/path/to/my/file/filename.txt' 
500245 description 240 chars  56         '/path/to/my/file/filename.txt' 
500245 NA          59 columns 31 columns '/path/to/my/file/filename.txt' 
500333 description 240 chars  33         '/path/to/my/file/filename.txt' 
See problems(...) for more details.

col_types - это строка из 60 'c' символов в строке, поэтому все столбцы считываются как символы. fwf_widths и fwf_names - соответствующие спецификации для предлагаемой ширины столбца и заголовков столбцов.

Я понимаю, что, пропуская значения в последнем столбце df, я нарушаю природу документа с фиксированной шириной.

Есть ли способ, которым я могу 1) Получить read_fwf, чтобы сохранить эти частично заполненные строки? 2) Если нет, как я могу прочитать в этом текстовом файле, учитывая, что 99% его можно проанализировать в соответствии с нормальным FWF?

1 Ответ

1 голос
/ 08 января 2020

Вы можете использовать data.table::fread(). Он автоматически определяет форматы фиксированной ширины и, используя опцию fill=TRUE, должен дать вам то, что вы хотите:

#abc.txt
#a   b   c   d
#1   2   3   4
#1   2   3   4
#2   3
#1   4   3   2
library(data.table)
fread('abc.txt',fill = T)
#    a b  c  d
# 1: 1 2  3  4
# 2: 1 2  3  4
# 3: 2 3 NA NA
# 4: 1 4  3  2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...