【问题标题】:importing date correctly from MySQL into R将日期从 MySQL 正确导入 R
【发布时间】: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
  • 成功了。谢谢!

标签: r dplyr rmysql


【解决方案1】:

我也解决了 datetime 列问题,但是简短的回答说,用RMariaDB 替换您当前的 MySQL DBI 驱动程序是解决方案。

正如这个问题下提到的cmets,这个问题实际上已经在RMySQL from 0.11的开发上游解决了,但唯一的问题是这个版本不能从官方CRAN存储库中获得。换句话说,如果您不介意通过 devtools 手动安装软件包,那么从 RMySQL 0.11 源代码安装正是这个问题的答案。

但正如自述文件中官方所述,RMariaDB 包将作为 RMySQL 驱动程序的替代品。当然Datetime Support的功能也包含在RMariaDB的主流包中。更重要的是,最新版本的 1.0.6 版本可从 CRAN 官方存储库获得。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-03
    • 1970-01-01
    • 2011-12-25
    • 2021-04-16
    • 1970-01-01
    • 2015-05-08
    • 2016-06-29
    相关资源
    最近更新 更多