2016-10-21 2 views
2

Ich bin immer noch sehr neu in R und ich entschuldige mich, wenn ich nicht die richtige Terminologie verwende. Ich bin daran interessiert, eine große Menge an Arbeitslosenversicherungs-Treuhandfonds-Daten aus dem Treasury Direct Online-Berichtabfragesystem (http://www.treasurydirect.gov/govt/reports/tfmp/tfmp_utf.htm) zu ziehen, und ich habe die Informationen unter Verwendung von readLines erfolgreich abgerufen.Lesen und analysieren Sie eine irreguläre und gemischte ASCII-Datei in R

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

was mir das Diagramm als Zeichenfolge Vektor gibt.

Gibt es eine Möglichkeit, die Zeilen dann zu parsen und in einen Datenrahmen zu verwandeln, damit ich sie zumindest übertreffen kann und die wichtigen Informationen leicht herausholen kann? Ich bin mir sicher, dass es auch eine andere Möglichkeit gibt, dies zu tun, aber die Berichte unterscheiden sich immer darin, welche Abschnitte des Buchhaltungscodes enthalten sind und wie viele einzelne Transaktionen enthalten sind, so dass ich nicht einmal sicher bin, wo ich damit anfangen soll.

Die Elemente, die ich brauche, sind das Datum, die Aktie/Par (Dollar-Transaktionsbetrag), der Transaktionscode und die Transaktionsbeschreibung. Die Summen wären nützlich, aber keineswegs notwendig.

Wenn man es auch dreht mit Excel sieht es aus wie enter image description here

Antwort

0

Dieses Sie die Informationen analysieren helfen:

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) 

Was das bedeutet zunächst alle Zeilen auswählen, die eine / Zeichen enthalten. Dies wird sogar die Spaltentitel zurückgeben. Diese sind in d gespeichert.

Wenn Sie d untersuchen:

[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" 

Die Informationen ordentlich ausgerichtet ist. Dies bedeutet, dass die Daten jeder Spalte an einer genauen Position enden. Um dies zu analysieren, können Sie substr mit Start und Stopp verwenden, wie in meinem Skript gezeigt.

Natürlich habe ich nicht alle Parsen abgeschlossen, ich lasse Sie den Rest erledigen. Sobald jeder Spalte analysiert wird, erstellen Sie eine data.frame(dates, sharesPar, ...)

+0

Das ist perfekt. Vielen Dank! – KevinS

0

Es ist ein fester Breite-Format, so dass es sollte als solches behandelt werden:

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"))