第五章:数据操作Ⅱ:数据处理及加工 第一节:使用SQL处理数据

我们可以使用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中可以适当使用索引以提升速度,并且,由于采用了基于数据库的技术,能够大大提高程序的运行速度

上一篇:【Flink SQL】Flink SQL 基础概念(五):SQL 时区问题


下一篇:Scala第五章节(方法、函数的格式和用法以及九九乘法表案例)