下面是简单代码:
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),]
OwnerUserId CreationDate
1: 24612 2016-05-27 03:17:41
我只是好奇这种行为是否在意料之中。
如果是,那么如何通过sqldf和data.table得到相同的结果?
1条答案
按热度按时间mnowg1ta1#
csv的内容,注意没有提到任何时区
当你读入它时,fread把它作为一个因素,因为它只是一个字符串,你没有给它任何理由去想别的。
当我运行sqldf时,我得到的正是我所期望的,它与data.table完全相同。
如果非要我猜的话,我的钱会在上面,因为它在某个地方被参照物改变了。你能在freshr会话上运行这里的代码,看看是否仍然得到相同的结果吗?
编辑:也看看什么
getOption("sqldf.method")
你的回报。它可能使用了“name\uu class”,但即使这样也不太可能产生这样的结果。