#r #readlines
#r #строки чтения
Вопрос:
Я все еще новичок в R и прошу прощения, если я не использую правильную терминологию. Я заинтересован в извлечении большого объема данных целевого фонда страхования по безработице из системы прямых онлайн-запросов отчетов казначейства (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 и легко извлечь из него важную информацию? Я уверен, что есть и другой способ сделать это, но отчеты всегда будут отличаться в том, какие разделы бухгалтерского кода включены и сколько отдельных транзакций включено, поэтому я даже не уверен, с чего начать.
Мне нужны следующие элементы: дата, доля / номинал (сумма транзакции в долларах), код транзакции и описание транзакции. Итоговые значения были бы полезны, но ни в коем случае не обязательны.
Ответ №1:
Это поможет вам проанализировать информацию:
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
с помощью start и stop, как показано в моем скрипте.
Конечно, я не завершил все синтаксические анализы, я позволю вам закончить остальное. После анализа каждого столбца создайте data.frame(dates, sharesPar, ...)
Комментарии:
1. Это идеально. Спасибо!
Ответ №2:
Это формат фиксированной ширины, поэтому его следует рассматривать как таковой:
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"))