4.11 使用SQL语句操作数据框
到目前为止,你一直在使用R语句操作数据。但是,许多数据分析人员在接触R之前就已经精通了结构化查询语言(SQL),要丢弃那么多积累下来的知识实为一件憾事。因此,在我们结束本章之前简述一下sqldf
包。(如果你对SQL不熟,请尽管跳过本节。)
在下载并安装好这个包以后(install.packages("sqldf")
),你可以使用sqldf()
函数在数据框上使用SQL中的SELECT
语句。代码清单4-7给出了两个示例。
代码清单4-7 使用SQL语句操作数据框
> library(sqldf)
> newdf <- sqldf("select * from mtcars where carb=1 order by mpg",
row.names=TRUE)
> newdf
mpg cyl disp hp drat wt qsec vs am gear carb
Valiant 18.1 6 225.0 105 2.76 3.46 20.2 1 0 3 1
Hornet 4 Drive 21.4 6 258.0 110 3.08 3.21 19.4 1 0 3 1
Toyota Corona 21.5 4 120.1 97 3.70 2.46 20.0 1 0 3 1
Datsun 710 22.8 4 108.0 93 3.85 2.32 18.6 1 1 4 1
Fiat X1-9 27.3 4 79.0 66 4.08 1.94 18.9 1 1 4 1
Fiat 128 32.4 4 78.7 66 4.08 2.20 19.5 1 1 4 1
Toyota Corolla 33.9 4 71.1 65 4.22 1.83 19.9 1 1 4 1
> sqldf("select avg(mpg) as avg_mpg, avg(disp) as avg_disp, gear
from mtcars where cyl in (4, 6) group by gear")
avg_mpg avg_disp gear
1 20.3 201 3
2 24.5 123 4
3 25.4 120 5
第一个示例中,你从数据框mtcars
中选择了所有的变量(列),保留了那些使用化油器(carb
)的车型(行),按照mpg
对车型进行了升序排序,并将结果保存为数据框newdf
。参数row.names=TRUE
将原始数据框中的行名延续到了新数据框中。在第二个示例中,你输出了四缸和六缸车型每一gear
水平的mpg
和disp
的平均值。
经验丰富的SQL用户将会发现,sqldf
包是R中一个实用的数据管理辅助工具。请参阅项目主页(http://code.google.com/p/sqldf/)以了解详情。