我们可以使用sqldf包来实现使用mySQL处理数据,它可以减少数据转换的麻烦,使SQL语句用户更容易访问数据,我们可以借助sqldf包,在给出SQL命令后,自动生成Schema,并将数据加载到表格,然后执行SQL语句,并且,如果SQL的执行结果会被再次加载到R,由于该处理过程是自动进行的,所以用户不必安装数据框并设置环境。
sqldf包的主函数为sqldf(),具有以下功能
我们先安装数据包
install.packages("sqldf")
library(sqldf)
之后,我们可以使用sqldf()函数来查看鸢尾花数据,例如我们可以选取Species列,不过在此之前我们需要安装RSQLite包
install.packages("RSQLite")
library(RSQLite)
#因为这通常是因为sqldf()默认情况下尝试连接到一个SQLite数据库,而SQLite是一种轻量级的数据库引擎,可以在本地文件中存储数据,适合用于在内存中处理数据
安装完毕以后,我们可以
> # 将SQLite作为sqldf()函数的后端,即设置sqldf()函数使用SQLite作为执行SQL查询的数据库引擎
> options(sqldf.driver = "SQLite")
> data("iris")#将iris加载入内存中
> result <- sqldf("SELECT DISTINCT Species FROM iris")
> View(result)
就可以看到Species的种类了
由此,我们就可以是用sqldf函数进行一些操作,例如求Sepal.Length的平均值
result <- sqldf("SELECT avg(`Sepal.Length`) FROM iris WHERE Species='setosa'")
> result
avg(`Sepal.Length`)
1 5.006
#这边特别提醒在选取列的时候要使用反引号,否则会出现无法选择列的情况
我们也可以求不同瓶中鸢尾花的Sepal.Length的平均值,可以使用SQL的group by语句
> sqldf("select Species,avg(`Sepal.Length`) from iris group by Species")
Species avg(`Sepal.Length`)
1 setosa 5.006
2 versicolor 5.936
3 virginica 6.588
sqldf包提供了多种优化,比如将磁盘作保存空间,或者创建1次数据后可以重复使用,不必每次运行sqldf()函数时都先将数据框保存到数据库后然后处理、删除。sqldf默认支持sqlite,因此在sqldf中可以适当使用索引以提升速度,并且,由于采用了基于数据库的技术,能够大大提高程序的运行速度