Прочитайте и проанализируйте неправильный и смешанный файл ASCII в R

Я все еще очень новичок в R, и я прошу прощения, если я не использую правильную терминологию. Я заинтересован в извлечении большого количества данных Трастового фонда страхования по безработице из системы запроса онлайн-отчетов Treasury Direct (http://www.treasurydirect.gov/govt/reports/tfmp/tfmp_utf.htm), и я успешно получил информацию, используя readLines.

ESAA_OCT15 <- readLines('http://www.treasurydirect.gov/govt/reports/tfmp/utf/es/dfiw01015tses.txt')

который дает мне диаграмму в виде вектора строки.

Есть ли способ затем проанализировать строки и превратить их в фрейм данных, чтобы я мог, по крайней мере, поместить его в Excel и легко получить из него важную информацию? Я уверен, что есть и другой способ сделать это, но отчеты всегда будут различаться в зависимости от того, какие разделы бухгалтерского кода включены и сколько отдельных транзакций включены, поэтому я даже не уверен, с чего начать.

Мне нужны дата, доля/номинальное значение (сумма транзакции в долларах), код транзакции и описание транзакции. Итоги были бы полезны, но ни в коем случае не необходимы.

Когда вы смотрите на это с помощью Excel, это выглядит как введите здесь описание изображения


person KevinS    schedule 21.10.2016    source источник


Ответы (2)


Это поможет вам проанализировать информацию:

ESAA_OCT15 <- readLines('http://www.treasurydirect.gov/govt/reports/tfmp/utf/es/dfiw01015tses.txt')
# Select lines with /
z = grepl(pattern = "/",x = ESAA_OCT15)
d = trimws(ESAA_OCT15[z])

dates = substr(d,0,10)
sharesPar = substr(d,11,41)

Это сначала выбирает все строки, содержащие символ /. Это даже вернет заголовки столбцов. Они хранятся в d.

Если вы исследуете d:

[1] "Effective Date                 Shares/Par  Description Code           Memo Number    Code      Account Number"
 [2] "10/01/2015                 2,313,000.0000  12-10 FUTA RECEIPTS         3305617                 ESAA"          
 [3] "10/01/2015                 3,663,000.0000  12-10 FUTA RECEIPTS         3305618                 ESAA"          
 [4] "10/02/2015                 4,314,000.0000  12-10 FUTA RECEIPTS         3305640                 ESAA"          
 [5] "10/05/2015                 3,512,000.0000  12-10 FUTA RECEIPTS         3305662                 ESAA"

Информация выровнена аккуратно. Это означает, что данные каждого столбца заканчиваются в определенной позиции. Чтобы разобрать это, вы можете использовать substr с запуском и остановкой, как показано в моем сценарии.

Я, конечно, не все разборы выполнил, остальные дам вам доделать. После анализа каждого столбца создайте data.frame(dates, sharesPar, ...)

person R. Schifini    schedule 21.10.2016
comment
Это потрясающе. Спасибо! - person KevinS; 21.10.2016

Это формат с фиксированной шириной, поэтому его следует рассматривать как таковой:

library(dplyr)
library(readr)

readLines("http://www.treasurydirect.gov/govt/reports/tfmp/utf/es/dfiw01015tses.txt") %>% 
  grep("^\ +[[:digit:]]+/[[:digit:]]+", ., value=TRUE) %>% # grab only the lines with data
  textConnection() %>% 
read.fwf(widths=c(19, 26, 27, 15, 10, 27), skip=7) %>%     # read the columns
  mutate_all(trimws) %>%                                   # clean them up
  type_convert() %>%                                       # you still need to convert the date even with this type conversion
  setNames(c("effective_date", "shares_per",               # add decent colnames
             "trans_descr_code", "memo_num", "location_code", "acct_no"))
person hrbrmstr    schedule 21.10.2016