如何解决为什么 sqldf 将日期时间转换为 R 中的本地,而 data.table 没有?
以下简单代码:
library(sqldf)
library(data.table)
OwnerUserId <- c(24612)
CreationDate <- c("2016-05-27 03:17:41")
DataTable <- data.table(OwnerUserId,CreationDate)
write.csv(DataTable,"DataTable.csv")
DataTable <- fread("DataTable.csv",stringsAsFactors = TRUE)
sqldf("
SELECT OwnerUserId,CreationDate
FROM DataTable
WHERE OwnerUserId == 24612
")
DataTable[OwnerUserId == 24612,.(OwnerUserId,CreationDate),]
产生以下输出:
OwnerUserId CreationDate
1 24612 2016-05-27 09:17:41
> DataTable[OwnerUserId == 24612,]
OwnerUserId CreationDate
1: 24612 2016-05-27 03:17:41
我只是好奇这种行为是否符合预期。
如果是,那么我们如何通过 sqldf 和 data.table 获得相同的结果?
解决方法
csv 的内容,注意没有提到任何时区
# "","OwnerUserId","CreationDate"
# "1",24612,"2016-05-27 03:17:41"
当您读入它时,fread 将其视为一个因素,因为它只是一个字符串,而您没有给它任何理由不这么想。
DataTable <- fread("DataTable.csv",stringsAsFactors = TRUE)
DataTable[,str(CreationDate)]
# Factor w/ 1 level "2016-05-27 03:17:41": 1
当我运行 sqldf 时,我得到了我所期望的结果,并且它与 data.table 相同。
sqldf("
SELECT OwnerUserId,CreationDate
FROM DataTable
WHERE OwnerUserId == 24612
")
# OwnerUserId CreationDate
# 1 24612 2016-05-27 03:17:41
如果非要我猜的话,我的钱应该是在某处参考更改后的。你能在新的 R 会话上运行这里的代码,看看你是否仍然得到相同的结果?
编辑:还请查看 getOption("sqldf.method")
为您返回的内容。有可能它正在使用“name__class”,但即使如此也不太可能产生这种结果。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。