在 sqldf 中将整数值转换为日期时间
Convert an integer value to datetime in sqldf
我正在使用 sqldf 库来 return 一个具有不同值且只有日期列最大值的数据框。数据框看起来像这样
+------+----------+--------+-----------------+
| 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 |
+------+----------+--------+-----------------+
请告诉我如何转换最后一列,这是一个整数以恢复我的日期时间格式。
尝试:
> as.POSIXct(1416406625, origin = "1970-01-01", tz = "GMT")
[1] "2014-11-19 14:17:05 GMT"
您可能需要更改时区 (tz
) 以获得正确的时间。
下次请以可复制的形式提供您的意见。这次我已经在下面为您完成了。此外,问题中的 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
我正在使用 sqldf 库来 return 一个具有不同值且只有日期列最大值的数据框。数据框看起来像这样
+------+----------+--------+-----------------+
| 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 |
+------+----------+--------+-----------------+
请告诉我如何转换最后一列,这是一个整数以恢复我的日期时间格式。
尝试:
> as.POSIXct(1416406625, origin = "1970-01-01", tz = "GMT")
[1] "2014-11-19 14:17:05 GMT"
您可能需要更改时区 (tz
) 以获得正确的时间。
下次请以可复制的形式提供您的意见。这次我已经在下面为您完成了。此外,问题中的 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