2016-06-18 22 views
0

Kombination I heruntergeladenen Daten aus dem Internet. Ich wollte die Daten extrahieren und einen Datenrahmen erstellen. Sie finden die Daten im folgenden Link für den gefilterten Datensatz: http://www.esrl.noaa.gov/gmd/dv/data/index.php?category=Ozone&type=Balloon. Am unteren Ende der Seite können Sie aus den 9 gefilterten Datensätzen einen beliebigen Sender auswählen. Sag Suva, Fidschi (SUV):Daten aus Textdatei lesen und es mit Datum in r

Ich habe den folgenden Code geschrieben, um einen Datenrahmen zu erstellen, der Launch-Datum als Teil des Datenrahmens für jede Datei hat.

setwd("C:/Users/") 
    path = "~C:/Users/" 
    files <- lapply(list.files(pattern = '\\.l100'), readLines) 
    test.sample<-do.call(rbind, lapply(files, function(lines){ 
     data.frame(datetime = as.POSIXct(sub('^.*Launch Date : ', '', lines[grep('Launch Date :', lines)])), 
       # and the data, read in as text 
       read.table(text = lines[(grep('Sonde Total', lines) + 1):length(lines)])) 
    })) 

Die Dateien stammen vom FTP-Server. Das Muster der Datei kommt mir nicht bekannt vor, obwohl ich es mit .txt versucht habe, es hat nicht funktioniert. Können Sie den obigen Code oder einen anderen Code optimieren, um einen Datenrahmen zu erhalten?

Vielen Dank im Voraus.

+0

Ihr Ansatz sieht OK aus, aber ich verstehe nicht, was nicht funktioniert. Ist es einfach, dass das Format für das Datum nicht genau das ist, was asPOSIXct erwartet. Versuchen Sie 'lubridate :: dmy()' –

+0

@Richard Telford. Danke für den Hinweis. Ich habe es mit POSITXlt und lubridate versucht, aber es scheint nicht für mich zu funktionieren. Können Sie bitte von der Website überprüfen? Es gibt mir eine harte Zeit. – G1124E

+0

Zumindest in der Datei, die ich geöffnet habe, gibt es mehr als ein Leerzeichen zwischen "Startdatum" und ":". 'grep' erkennt die Suchzeichenfolge nicht und nicht' sub'. Sie können einen regulären Ausdruck verwenden, um mit beliebig vielen Leerzeichen umzugehen. Der Code ist sehr knapp - nicht immer eine gute Sache! –

Antwort

0

Ich denke, das Problem ist, dass die Suchzeichenfolge nicht übereinstimmt "Startdatum:" stimmt nicht überein, was in den Dateien ist (zumindest die eine, die ich überprüft habe).

Dies sollte

lines <- "Launch Date : 11 June 1991" 
lubridate::dmy(sub('^.*Launch Date.*: ', '', lines[grep('Launch Date', lines)])) 

-Code arbeiten wahrscheinlich einfacher wäre zu debuggen, wenn Sie das Problem in Schritten brach und nicht als ein Satz

+0

Ihr Ausdruck sieht gut aus. Wie bekomme ich die Werte nur aus den Daten? Ich meine den Tabellenteil der Datei. Ich wählte '(grep ('Sonde Total', Linien) +1)' aber ich bekam: 'Fehler in' (grep ('Sonde Total', Linien) +1): Länge (Linien): Argument der Länge 0'. Macht das für Sie Sinn? Und was können Sie über den Dateityp sagen? Ich denke, es ist '.txt' was soll ich in das Muster = '' der Datei einfügen? – G1124E

+0

Irgendwelche Vorschläge? – G1124E

0

ich folgende Vorgehensweise nahm:

td <- tempdir() 
setwd(td) 

ftp <- 'ftp://ftp.cmdl.noaa.gov/ozwv/Ozonesonde/Suva,%20Fiji/100%20Meter%20Average%20Files/' 
files <- RCurl::getURL(ftp, dirlistonly = T) 
files <- strsplit(files, "\n") 
files <- unlist(files) 

dat <- list() 
for (i in 1:length(files)) { 
    download.file(paste0(ftp, files[i]), 'data.txt') 
    df <- read.delim('data.txt', sep = "", skip = 17) 
    ld <- as.character(read.delim('data.txt')[9, ]) 
    ld <- strsplit(ld, ":")[[1]][2] 
    df$launch.date <- stringr::str_trim(ld) 
    dat[[i]] <- df ; rm(df) 
} 
+0

Ich habe versucht, Ihren Code, aber gibt mir einen Fehler: ''URL' ftp: // ftp.cmdl.noaa.gov/ozwv/Ozonesonde/Suva,% 20Fiji/100% 20Meter% 20Average% 20Files/fj001_1997_02_06_22.l100' 'synchrone WinInet Anrufe verwenden ' ' Fehler in download.file (paste0 (ftp, dateien [i]), "data.txt") ': ' kann URL 'ftp://ftp.cmdl.noaa.gov nicht öffnen /ozwv/Ozonesonde/Suva,%20Fiji/100%20Meter%20Average%20Files/fj001_1997_02_06_22.l100 Zusätzlich: Warnmeldung: 'In download.file (paste0 (ftp, Dateien [i])," data.txt ") ': ' InternetOpenUrl fehlgeschlagen: ‚9 #> l'' glauben Sie, der Fehler von Grabbing die uRL ' – G1124E

+0

Jeder Vorschlag? – G1124E

+0

@ G1124E Ich bin mir nicht sicher über den Fehler. Der Code funktioniert auf meinem Computer einwandfrei. –