【发布时间】:2017-10-01 09:37:34
【问题描述】:
我的问题与as this one 几乎相同。简而言之,我正在使用 dplyr(与 RMySQL 一起)导入带有 datetime 列的 MySQL 表,并且我想将其转换为 R 中的日期。在上面链接的问题中,没有发布答案,只有 Hadley 的评论. OP显然根据所发表的评论找到了解决方案。我从 Hadley 的评论中了解到,我可以通过将列作为日期正确导入 R 来解决问题。那么就不需要使用 as.Date。但是,我找不到使用 dplyr 和 RMySQL 的方法。
我不知道如何发布一个完全可重现的示例,因为它是一个 MySQL 数据库连接,但我会发布我的代码:
如果我尝试:
pedidos <- my_db %>%
tbl("pedidos") %>%
mutate(test = as.Date(DateSent))
然后我运行:
pedidos
R 返回:
FUNCTION AS.DATE does not exist
与另一个问题中的 OP 一样,我可以使用 collect() 来解决该问题,但这样就违背了不将数据复制到内存中的目的。这是有关 MySQL 中数据类型的一些信息 DateSent 是日期时间
和 R sessionInfo():
R version 3.3.1 (2016-06-21)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)
locale:
[1] LC_COLLATE=Portuguese_Brazil.1252
[2] LC_CTYPE=Portuguese_Brazil.1252
[3] LC_MONETARY=Portuguese_Brazil.1252
[4] LC_NUMERIC=C
[5] LC_TIME=Portuguese_Brazil.1252
attached base packages:
[1] stats graphics grDevices utils datasets
[6] methods base
other attached packages:
[1] RMySQL_0.10.11 DBI_0.5-1 dplyr_0.5.0
[4] digest_0.6.12
loaded via a namespace (and not attached):
[1] lazyeval_0.2.0 magrittr_1.5 R6_2.2.0
[4] assertthat_0.1 rsconnect_0.5 tools_3.3.1
[7] tibble_1.2 Rcpp_0.12.8
【问题讨论】:
-
您尝试访问的表的架构是什么?如果不调用 collect,就不能调用数据库中没有等效项的 R 函数。如果 dplyr 无法将您的 mutate 请求转换为正确的 SQL 语句,那么如果不将数据拉入 R 就无法运行。
-
是的,这就是我的理解。这就是为什么我认为解决方案是以正确格式导入列的原因。关于模式,该表有很多列。但相关的列信息是:field: DateSent;类型:日期时间;空:是;默认值:NULL
-
也许可以试试 RMySQL_0.11 或更新版本,they claim to support proper datetime values
-
成功了。谢谢!