sqldf: Daten nach Datumsbereich abfragen
Ich lese aus einer riesigen Textdatei mit'%d/%m/%Y'
Datumsformat. Ich möchte read.csv.sql von sqldf verwenden, um die Daten gleichzeitig nach Datum zu lesen und zu filtern. Dies spart Speicherplatz und Laufzeit, indem viele Daten übersprungen werden, an denen ich nicht interessiert bin. Ich weiß, wie dies mit Hilfe von @ zu tun isdplyr
undlubridate
, aber ich möchte nur mit @ versuchsqldf
aus dem oben genannten Grund. Obwohl ich mit der SQL-Syntax gut vertraut bin, bekomme ich sie die meiste Zeit, keine Ausnahme mitsqldf
.
Ausführender Befehl wie der folgende gab einen data.frame mit der Zeile 0 zurück:
first_date <- "2001-11-1"
second_date <- "2003-11-1"
query <- "select * from file WHERE strftime('%d/%m/%Y', Date, 'unixepoch', 'localtime') between
'$first_date' AND '$second_date'"
df <- read.csv.sql(data_file,
sql= query,
stringsAsFactors=FALSE,
sep = ";", header = TRUE)
Also für die Simulation habe ich versucht mitsqldf
funktioniert wie folgt:
first_date <- "2001-11-1"
second_date <- "2003-11-1"
df2 <- data.frame( Date = paste(rep(1:3, each = 4), 11:12, 2001:2012, sep = "/"))
sqldf("SELECT * FROM df2 WHERE strftime('%d/%m/%Y', Date, 'unixepoch') BETWEEN '$first-date' AND '$second_date' ")
# Expect:
# Date
# 1 1-11-2001
# 2 1-12-2002
# 3 1-11-2003