2016-07-28 31 views
0

Ich habe this file, die drei .csv-Dateien enthält, EURAUD_201501, EURAUD_201502, EURAUD_201503. Die Dateien enthalten von Januar bis März 2015 Forex-Tick-Daten. Der erste Schritt meiner Übung besteht darin, den Datensatz in eine funktionale Form zu bringen. Der (Arbeits-) Code ist:Erstellen Sie eine gültige Schleife auf R

#Entering and editing data by hand# 

data1<-read.csv("EURAUD_201501.csv", header = FALSE, col.names = c("TIMESTAMP", "BID", "OFR", "VOL"), stringsAsFactors = FALSE) 
data1$VOL<- NULL #drops the VOL column 
data1$TIMESTAMP = sub('(?<=.{11})', ':', data1$TIMESTAMP, perl=TRUE) #manipulate the strings to create clear timestamps 
data1$TIMESTAMP = sub('(?<=.{14})', ':', data1$TIMESTAMP, perl=TRUE) 
data1$TIMESTAMP = sub('(?<=.{17})', '.', data1$TIMESTAMP, perl=TRUE) 
xts_data1 = xts(data1[,c(2,3)], order.by = as.POSIXct(data1$TIMESTAMP, tz = "EST", format = "%Y%m%d %H:%M:%OS")) #Convert file to an xts object 
rm(data1) #remove data1 object in order to save space 

data2<-read.csv("EURAUD_201502.csv", header = FALSE, col.names = c("TIMESTAMP", "BID", "OFR", "VOL"), stringsAsFactors = FALSE) 
data2$VOL<- NULL #drops the VOL column 
data2$TIMESTAMP = sub('(?<=.{11})', ':', data2$TIMESTAMP, perl=TRUE) #manipulate the strings to create clear timestamps 
data2$TIMESTAMP = sub('(?<=.{14})', ':', data2$TIMESTAMP, perl=TRUE) 
data2$TIMESTAMP = sub('(?<=.{17})', '.', data2$TIMESTAMP, perl=TRUE) 
xts_data2 = xts(data2[,c(2,3)], order.by = as.POSIXct(data2$TIMESTAMP, tz = "EST", format = "%Y%m%d %H:%M:%OS")) #Convert file to an xts object 
rm(data2) #remove data2 object in order to save space 

data3<-read.csv("EURAUD_201503.csv", header = FALSE, col.names = c("TIMESTAMP", "BID", "OFR", "VOL"), stringsAsFactors = FALSE) 
data3$VOL<- NULL #drops the VOL column 
data3$TIMESTAMP = sub('(?<=.{11})', ':', data3$TIMESTAMP, perl=TRUE) #manipulate the strings to create clear timestamps 
data3$TIMESTAMP = sub('(?<=.{14})', ':', data3$TIMESTAMP, perl=TRUE) 
data3$TIMESTAMP = sub('(?<=.{17})', '.', data3$TIMESTAMP, perl=TRUE) 
xts_data3 = xts(data3[,c(2,3)], order.by = as.POSIXct(data3$TIMESTAMP, tz = "EST", format = "%Y%m%d %H:%M:%OS")) #Convert file to an xts object 
rm(data3) #remove data3 object in order to save space 

#Create 5-minute intervals 
final_xts = rbind.xts(xts_data1, xts_data2, xts_data3) 
rm(data1_xts, data2_xts, data3_xts) 
final_fivemin = aggregatets(final_xts, FUN = "previoustick", on = "minutes", k = 5) 

Wie kann ich eine funktionelle Schleife erstellen, ohne die gleiche Prozedur für jede Datensatz zu wiederholen?

Antwort

2

Scheint so, als ob Sie vielleicht versuchen möchten lapply. Sie könnten die for Schleife mit

xts_data <- lapply(real_data, function(x){ 
    data <- read.csv(x, header = FALSE, col.names = c("TIMESTAMP", "BID", "OFR", "VOL"), 
     stringsAsFactors = FALSE) 
    data$VOL<- NULL #drops the VOL column 
    data$TIMESTAMP = sub('(?<=.{11})', ':', data[i]$TIMESTAMP, perl=TRUE) #manipulate the strings to create clear timestamps 
    data$TIMESTAMP = sub('(?<=.{14})', ':', data[i]$TIMESTAMP, perl=TRUE) 
    data$TIMESTAMP = sub('(?<=.{17})', '.', data[i]$TIMESTAMP, perl=TRUE) 
    return(xts(data[,c(2,3)], 
     order.by = as.POSIXct(data$TIMESTAMP, tz = "EST", format = "%Y%m%d %H:%M:%OS"))) 
     #Convert file to an xts object 
}) 

ersetzen Und dann beenden:

#Create 5-minute intervals 
final_xts = do.call(rbind, xts_data) 
final_fivemin = aggregatets(final_xts, FUN = "previoustick", on = "minutes", k = 5) 
+0

Dank für Ihre Antwort danken. Ich denke, Sie sind auf dem richtigen Weg, aber wir brauchen ein bisschen mehr Anstrengung, um das gewünschte Ergebnis zu erreichen. Wenn Sie meinen ersten funktionalen Code ausführen, erstellt er Matrizen [data_frames ist der passende Ausdruck, den ich erwarte]. Ich starte deinen Code aber es kommt leider nicht zurück was ich will. Ich werde meine erste Frage bearbeiten, um sie klarer zu machen. – Greconomist

+0

Ich habe keine Daten, daher kann ich Ihren Code nicht ausführen. Aber 'lapply' gibt eine Liste zurück; Um einen Datenrahmen zu erhalten, können Sie 'final_xts <- do.call (rbind, xts_data)' nach dem obigen Code-Chunk machen. –

+0

Wenn Sie auf "Ich habe ** diese Datei **" oben in meinem Beitrag klicken, können Sie die Daten herunterladen. – Greconomist