对于数据分析人员而言,R语言基本能够支持数据分析过程中的绝大部分需求。但对于习惯使用SQL语句处理数据的数据分析师,似乎更愿意将数据查询过程放在数据库中实现。sqldf包的出现,对这部分分析师来说绝对算是一个神作,因为它可以实现在R语言中使用SQL语句对data.frame进行查询操作。


目录:

       1. sqldf介绍

       2.sqldf包安装

       2.sqldf包的使用

sqldf包介绍

sqldf包是用于在R语言环境中,对data.frame格式的数据使用SQL进行查询处理的R包,能够使使用者能够方便的操作data.frame数据。使用者可以只根据数据框的名词进行SQL查询。同时还支持使用者直接利用sqldf包连接数据库,执行SQL语句,并将结果回到R语言中。总而言之,sqldf包对数据库的数据查询与R语言的数据整合起到了很好的衔接作用。

sqldf包的安装

sqldf包托管在cran上,因此可以使用R语言标准的安装语句进行sqldf的安装。

安装环境:MAC OS

sqldf包的安装依赖于gsubfn包、 proto包, RSQLite包,因此在安装sqldf包的过程中,系统会自动安装相关依赖包。

install.packages("sqldf")

当上述命令执行完毕,表面sqldf包已经安装完成,此时可以使用library(sqldf)函数调用sqldf包。

library(sqldf)

看看sqldf包的版本

packageVersion("sqldf")

[1] ‘0.4.10’

sqldf包的使用

1.简单查询

以iris数据集为例,使用sqldf包进行简单的查询

head(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa
#使用sqldf函数进行SQL查询
sqldf('select * from iris limit 5')
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
#使用sqldf函数进行条件查询
sqldf("select * from iris where Species == 'setosa' limit 10")
   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1           5.1         3.5          1.4         0.2  setosa
2           4.9         3.0          1.4         0.2  setosa
3           4.7         3.2          1.3         0.2  setosa
4           4.6         3.1          1.5         0.2  setosa
5           5.0         3.6          1.4         0.2  setosa
6           5.4         3.9          1.7         0.4  setosa
7           4.6         3.4          1.4         0.3  setosa
8           5.0         3.4          1.5         0.2  setosa
9           4.4         2.9          1.4         0.2  setosa
10          4.9         3.1          1.5         0.1  setosa
#使用sqldf更新数据
sqldf(c("update iris set Species = 'test' where Species == 'setosa' ", "select * from main.iris limit 10"))
   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1           5.1         3.5          1.4         0.2    test
2           4.9         3.0          1.4         0.2    test
3           4.7         3.2          1.3         0.2    test
4           4.6         3.1          1.5         0.2    test
5           5.0         3.6          1.4         0.2    test
6           5.4         3.9          1.7         0.4    test
7           4.6         3.4          1.4         0.3    test
8           5.0         3.4          1.5         0.2    test
9           4.4         2.9          1.4         0.2    test
10          4.9         3.1          1.5         0.1    test

使用sqldf远程连接数据库操作

首先加载RMySQL包

library(RMySQL)

sqldf("select * from t_data",dbname="test",drv="MySQL",

user="root",password="",host="127.0.0.1,port=3306)

通过注明mysql账户信息,用户可以直接使用sqldf包连接数据库,并执行SQL查询语句,同时返回结果数据框。

注意:sqldf包默认使用SQLite语言,当需要调整时,则可以通过改变drv参数来实现。