Как импортировать текстовый файл ASCII в R — the NIBRS

#r

#r

Вопрос:

В настоящее время я пытаюсь импортировать данные Национальной системы отчетности на основе заболеваемости (NIBRS) за 2019 год в R. Данные поступают в текстовом формате ASCII, и до сих пор я пробовал readr ::read_tsv и readr ::read_fwf. Однако, похоже, я не могу правильно импортировать данные — read_tsvпоказывает только 1 столбец, в то время как read_fwf нужны аргументы столбца, которые я не понимаю, как расшифровать на основе текстового файла.

Вот ссылка на NIBRS. Я использовал загрузки основного файла для загрузки архивированного файла для NIBR в 2019 году.

Моя общая цель — иметь типичный фрейм данных / tibble для этого набора данных, в котором имена столбцов соответствуют типу преступления, а строки — количеству инцидентов.

Я видел несколько других примеров импорта этих данных через эту страницу справки, но их копии данных охватывают только период до 2015 года (мои данные должны находиться в диапазоне от 2015-2019).

Вот скриншот предварительного просмотра файла .txt.

Ответ №1:

Комментарии:

1. Я ценю быстрый ответ. Я попытался read.fwf(pathname, widths = c(10,10), col.names = c("AGENCY_ID","INCIDENT_ID") попытаться получить столбцы AGENCY_ID и INCIDENT_ID из таблицы NIRBS_INCIDENT в словаре данных, на который вы ссылались. R все еще работает через несколько минут, что, я полагаю, означает, что я что-то сделал неправильно. Я предполагаю, что мне нужно указать таблицу, но я не вижу этого в документации для read.fwf. Я вижу, что это относится к read.table, но это не похоже на то, что мне нужно. У вас есть пример, которому я могу следовать, используя пару столбцов?

Ответ №2:

Мы можем использовать read_fwf с column_positions

 library(readr)
read_fwf(filename, column_positions = c(2, 5, 10))
  

Комментарии:

1. Я попытался использовать следующий код: nibrs <- read_fwf(file , fwf_positions(c(4,2,100), c("ACTIVITY_TYPE_ID","ACTIVITY_TYPE_CODE","ACTIVITY_TYPE_NAME"))) для первых 3 столбцов в словаре данных, на которые ссылается @bcarlsen. Это вернуло сообщение об ошибке. У вас есть небольшой пример фрагмента кода, чтобы получить пару указанных столбцов?