如何使用sqldf获取日期?

时间:2015-11-05 15:13:44

标签: r date sqldf

我的数据框有一个“DATE”字段。例如:"24-10-2015"

变量采用日期格式。

当我使用 sqldf 时,例如:select min(DATE), MAX (DATE) from table ...输出的数字是16623

尝试 FORMAT CONVERT ,但它们在sqldf中不起作用。

任何提示?

4 个答案:

答案 0 :(得分:7)

指定数据框中每列的方法。假设'data'是数据框的名称,列名称'd'包含'Date'格式。

尝试以下方法:

sqldf('select max(d) as MAX__Date,
              min(d) as MIN__DATE
       from data',
      method = "name__class")

这应该有效。

答案 1 :(得分:4)

我建议您使用POSIXct将日期转换为as.POSIXct,以便您可以使用date的{​​{1}}函数:

使用一些随机数据:

SQLite

然后你可以这样做:

#notice I keep the class of the date as POSIXct
#it really does not change anything
df <- data.frame(date = as.POSIXct('2015-01-01'))

#> df
#        date
#1 2015-01-01

你有你需要的东西。有关SQLite如何理解日期here

的更多信息

答案 2 :(得分:2)

另一种可能性是不更改您的sqldf功能,然后转换存储为数字的日期。您可以使用as.Date()

zoo::as.Date(16623)
[1] "2015-07-07"

正如LyzandeR所提到的,你应该指定origin来说明第一个日期是什么。如果您使用的是zoo软件包,则默认为“1970-01-01”,对于您的格式,它可能是正确的来源,但如果您不使用它(意味着您起诉{ {1}}包然后你必须指定它。

base

但如果您有来自Excel的日期,则应更改原点:

as.Date(16623, origin = "1970-01-01")
[1] "2015-07-07"

我实际上找到了为什么不提供zoo::as.Date(42313) [1] "2085-11-06" as.Date(42313, origin = "1899-12-30") # for Windows, use "1904-01-01" for Mac [1] "2015-11-05" # correct result 为我工作:我加载了包origin,其中“1970-01-01”是zoo的默认选项:

origin

以下是您可以看到base::as.Date(16623) Error in as.Date.numeric(16623) : 'origin' must be supplied zoo::as.Date(16623) [1] "2015-07-07" 为函数zoo指定默认origin的代码,而不是as.Date.numeric包的情况:

base

答案 3 :(得分:0)

如果仅需要检查特定的日期值而不是日期范围,则可以在调用sql代码之前使用as.character将日期列转换为字符串,如下所示:

table$date2 = as.character(table$date)
sqldf("select max(date2), min(date2) from table")

这对我来说确实很好,并且我还没有遇到任何缺点。

来自: https://ladvien.com/sqldf-dates/