【发布时间】:2017-12-21 21:45:52
【问题描述】:
我正在尝试使用 sqldf 根据日期范围过滤数据框,如下面的示例代码。我有像下面的示例数据这样的数据。 sqldf 返回的 datedf 数据帧没有记录。该日期范围内的 SHV 数据框中有记录,任何人都可以看到我做错了什么,并让我知道如何在 sqldf 中按日期范围进行过滤。对我来说,日期在 r 中总是很棘手。
Code:
datedf<-sqldf("select field1
,fieldDate
from SHV
where fieldDate between '2004-01-01' and '2005-01-01'
")
Data:
dput(SHV[1:50,c("field1","fieldDate")])
structure(list(field1 = c(1378L, 1653L, 1882L, 2400L,
2305L, 2051L, 2051L, 2051L, 1796L, 2054L, 2568L, 1290L, 1804L,
1804L, 3855L, 1297L, 2321L, 2321L, 2321L, 2071L, 2071L, 2074L,
2588L, 1567L, 1317L, 1317L, 808L, 808L, 1321L, 2350L, 1586L,
2613L, 1590L, 2614L, 2107L, 1340L, 1085L, 1085L, 2365L, 1344L,
1601L, 1858L, 1603L, 1603L, 1860L, 2376L, 1355L, 1867L, 2382L,
1872L), fieldDate = structure(c(12551, NA, NA, 14057, 15337,
12919, 13336, 10325, 14984, 15643, 12864, 11242, 10749, 11207,
10602, NA, 12646, 15649, NA, NA, NA, NA, NA, 17015, 13938, NA,
16693, NA, NA, 12634, 12614, 10689, 12755, 10844, 11375, 4899,
17298, 10905, 11450, NA, 10330, 15429, 12634, 10504, 12625, 11081,
10939, NA, 12934, 11176), class = "Date")), .Names = c("field1",
"fieldDate"), row.names = c(NA, 50L), class = "data.frame")
【问题讨论】:
-
没有该日期范围的记录。
-
SQLite 没有日期或时间数据类型,因此它将 Date 类变量作为 R Date 类型的内部表示形式发送,即自纪元以来的天数。如果您使用 RH2 后端(H2 确实有日期类型)而不是默认的 RSQLite 后端,那么您的 SQL 语句将按原样工作。
library(sqldf); library(RH2); sqldf(...your statement...)