sqldf: запрос данных по диапазону дат
Я читаю из огромного текстового файла, который имеет'%d/%m/%Y'
Формат даты. Я хочу использовать read.csv.sql из sqldf для одновременного чтения и фильтрации данных по дате. Это позволяет сэкономить память и время выполнения, пропустив много дат, которые меня не интересуют. Я знаю, как это сделать с помощьюdplyr
а такжеlubridate
, но я просто хочу попробовать сsqldf
по вышеупомянутой причине. Несмотря на то, что я хорошо знаком с синтаксисом SQL, он по-прежнему доставляет мне удовольствие, не исключаяsqldf
.
Выполнение команды, подобной следующей, вернуло data.frame с 0 строкой:
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)
Так что для моделирования я попробовал сsqldf
функция как следующее:
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