【问题标题】:How to use sqldf in R to manipulate local dataframes?如何在 R 中使用 sqldf 来操作本地数据帧?
【发布时间】:2020-05-23 19:48:26
【问题描述】:

我正在尝试分析 RStudio 中源自 MySQL 数据库的一些数据,因此我使用 dbConnect 连接到所述数据库,并复制了该项目所需的单个表。然后我用 R 稍微清理一下数据,去掉一些不需要的列。到目前为止,一切顺利。

当我意识到我的数据有一些异常值时,我的问题出现了,我需要删除包含明显异常值数据的行。这是我在 SQL 中没有问题的事情,但缺乏有效地做的 R 经验。所以我研究了它,发现了关于 sqldf 的包,它自称是一种使用 SQL 命令来操作 data.frames 的方法。完美的!但是我遇到了一些麻烦,因为 sqldf 似乎需要某种数据库连接。有没有办法简单地连接到我在 RStudio 的全局环境中拥有的 data.frame?

问:您不能在将 MySQL 中的数据导入 R 之前对其进行操作吗?
A:是的,如果有必要我会这样做,但我想更好地理解 sqldf。

【问题讨论】:

  • 如果您包含一个简单的reproducible example,其中包含可用于测试和验证可能解决方案的示例输入和所需输出,则更容易为您提供帮助。 ?sqldf 中的示例是否显示了在本地 data.frames 而不是数据库连接上工作的函数?您到底尝试了哪些,哪些没有奏效?
  • 您正在处理的数据在哪里?如果它是 R 中的 df,您应该能够使用 sqldf 而不必担心连接。如果您尝试连接到 mysql,则需要建立它。
  • 它是 R 中的一个 df,称为“Book”。我做了以下操作:sqldf("SELECT * FROM book"),得到了以下错误:Error in .local(drv, ...) : Failed to connect to database: Error: Can't connect to MySQL server on 'localhost' (0) Error in !dbPreExists : invalid argument type
  • 据我了解sqldf是在R中编写SQL以直接操作数据帧的包。因此,如果您在 Rstudio 中加载了一个数据框(无论它来自何处),您应该能够对其进行操作。
  • 试试sqldf("select * from book;", drv = 'SQLite')

标签: mysql r sqldf


【解决方案1】:

试试:

options(sqldf.driver = "SQLite")
sqldf("select * from book;", drv = 'SQLite')

【讨论】:

  • 你不需要drv=options。 (你也不需要分号。)一个或另一个就足够了。它的工作方式是,如果加载了 RMySQL,它将假定您要使用 MySQL 后端,除非您指定 optionsdrv。一种替代方法是首先确保没有加载 RMySQL。 detach("package:RMySQL") 可以使用(如果已经使用)。那么你就不需要使用optionsdrv
猜你喜欢
  • 2018-06-09
  • 1970-01-01
  • 2018-06-18
  • 2023-01-20
  • 2016-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多