在sqldf中将整数值转换为datetime

时间:2015-03-26 20:46:12

标签: r datetime dataframe sqldf

我正在使用sqldf库来返回具有不同值的数据框,并且只返回日期列的最大值。数据框看起来像这样

+------+----------+--------+-----------------+
| NAME |   val1   |  val2  |      DATE       |
+------+----------+--------+-----------------+
| A    |  23.7228 | 0.5829 | 11/19/2014 8:17 |
| A    |  23.7228 | 0.5829 | 11/12/2014 8:16 |
+------+----------+--------+-----------------+

当我尝试运行以下代码以获取具有最大日期的不同值

df <-  sqldf("SELECT DISTINCT NAME, val1, val2, MAX(DATE) FROM Table")

我将此作为输出。

+------+----------+--------+-----------------+
| NAME |   val1   |  val2  | MAX(DATE)       |
+------+----------+--------+-----------------+
| A    |  23.7228 | 0.5829 | 1416406625      |
+------+----------+--------+-----------------+

请让我知道如何转换最后一列,这是一个整数来取回我的日期时间格式。

2 个答案:

答案 0 :(得分:2)

下次请以可重复的形式提供您的输入。我这次为你做了这件事。此外,问题中的SQL代码还有一个SQLite语法错误,我已在下面修复过。

获得此权限的最简单方法是使用名称DATE作为输出列,在这种情况下,sqldf将确定其类型与DATE输入列的类型相同。 SQLite没有日期和时间类型,因此当使用sqldf和SQLite时,sqldf无法知道返回的内容是一个日期时间。 sqldf使用一些启发式方法来猜测,例如刚刚讨论的那个。

library(sqldf)

Lines <- "NAME,val1,val2,DATE     
A,23.7228,0.5829,11/19/2014 8:17 
A,23.7228,0.5829,11/12/2014 8:16"

Table <- read.csv(text = Lines, as.is = TRUE)
Table$DATE <- as.POSIXct(Table$DATE, format = "%m/%d/%Y %H:%M")

sqldf("SELECT DISTINCT NAME, val1, val2, MAX(DATE) DATE FROM 'Table'")

,并提供:

   NAME    val1   val2                DATE
1     A 23.7228 0.5829 2014-11-19 08:17:00

如果我们将H2与sqldf一起使用,那么我们就不会遇到这些问题,因为H2确实支持日期和时间类型,所以sqldf不必猜测。 SQL查询的语法也与H2中的一样。使用上面显示的Table data.frame:

library(RH2)
library(sqldf)

sqldf("SELECT DISTINCT NAME, val1, val2, MAX(DATE) DATE FROM Table")

给出:

   NAME    val1   val2           MAX(DATE)
1     A 23.7228 0.5829 2014-11-19 08:17:00

答案 1 :(得分:0)

尝试:

> as.POSIXct(1416406625, origin = "1970-01-01", tz = "GMT")
[1] "2014-11-19 14:17:05 GMT"

您可能需要更改时区(tz)以获得正确的时间。