r - R 中 sqldf 中的 min(date) 未转换为日期格式
问题描述
数据:
test <- read.table(text = "
user_id event_captured_dt send_dt
656072342 2016-12-30 2016-10-24
656072342 2016-11-10 2016-10-24
656072342 2016-11-15 2016-10-24
656072342 2016-11-21 2016-10-24
656072342 2016-11-23 2016-10-24
656072342 2017-03-07 2016-10-24
", header = TRUE)
test$event_captured_dt <- as.Date(test$event_captured_dt,format = '%Y-%m-%d')
test$send_dt <- as.Date(test$send_dt,format = '%Y-%m-%d')
我在 sqldf 中查询 min(send_date) 但它给出了 int 格式 op,但我需要它的日期格式。
sqldf('select date(min(event_captured_dt), "unixepoch","localtime") min_dt, send_dt from test group by send_dt')
预期 o/p 为:min_dt send_dt 1 2016-11-10 2016-10-24 当前 o/p 为:min_dt send_dt 1 1970-01-01 2016-10-24
解决方案
这已在 SO 上多次回答,也是 sqldf 常见问题解答。请参阅常见问题解答 #4。sqldf 如何处理“日期”类变量?在https://github.com/ggrothendieck/sqldf。
重申一下,默认后端 SQLite 没有日期类型。
H2
如果你想使用 Date 类变量,最简单的方法是使用 RH2 后端,因为 H2 确实有日期类型。如果加载了 RH2,sqldf 会注意到它并使用它。
library(RH2)
library(sqldf)
sqldf('select
min(event_captured_dt) min_dt,
send_dt
from test
group by send_dt')
## min_dt send_dt
## 1 2016-11-10 2016-10-24
SQLite
如果您想使用默认的 RSQLite 后端,请确保未加载 RH2(或按其他方式将 SQLite 指定为 sqldf ?sqldf
)。您可以使用verbose=TRUE
参数来sqldf
获取更多信息,包括正在使用哪个后端。
由于 SQLite 不支持日期Date
类变量以数字形式(自 UNIX 纪元以来的天数)发送到 SQLite,并且类似地返回到 R。如果sqldf
参数method="auto"
有效(通常是因为这是默认值),那么它将解释返回的数字列,就Date
好像该列的名称是Date
输入中的类一样。如果将方法更改为,method="Date"
则返回的所有数字列都将被视为Date
. 如果您使用method="name__class"
then 如果返回的列的名称以两个下划线和一个 R 类名称结尾,则sqldf
会将列转换为该类并从名称中删除下划线和类。因此,这些将起作用。确保未加载 RH2。(如果已加载,请将其卸载或重新启动 R。)有关更多信息,请参阅method
参数的文档。?sqldf
library(sqldf)
# using method="Date"
sqldf('select
min(event_captured_dt) min_dt,
send_dt
from test
group by send_dt', method = "Date")
## min_dt send_dt
## 1 2016-11-10 2016-10-24
或者
library(sqldf)
# using method="name__class"
sqldf('select
min(event_captured_dt) min_dt__Date,
send_dt send_dt__Date
from test
group by send_dt', method = "name__class")
## min_dt send_dt
## 1 2016-11-10 2016-10-24
推荐阅读
- asp.net-core - 在影子属性上创建索引
- json.net - 针对不同的用例使用不同的属性名称序列化和反序列化 JSON
- javascript - 如果同一天,则仅显示时间部分,否则显示完整日期时间
- python - gTTS 计划没有回应
- php - PHP - 使用 google api 客户端登录问题
- reactjs - 反应,上下文从购物车中删除项目
- react-native - 反应原生目标三星 Galaxy S7
- azure-active-directory - Azure AD 中的应用注册在大约 2 周后消失并出现在企业应用中
- sql - 如何在 SQL Server 中批量删除多个条件的数据
- javascript - 为什么此代码在 MacOS Big Sur Safari 上失败?