SQL,是结构语言化查询语言(Structured Query Language)的简称。SQL语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。
sqldf程序包是R语言中实用的数据管理辅助工具,sqldf程序包中比较常用的是sqldf函数中的select 语句。
#使用SQL语句操作数据框,需要加载的程序包sqldf,tcltk,使用iris数据集以及演示
library(sqldf)
library(tcltk)
head(iris)#了解数据集由5各变量组成
#取出前几行
a1r <- head(iris,10)#一般方法
a1s <- sqldf("select * from iris limit 10")#取出数据框的前六行,关键词limit
identical(a1r, a1s)#比较两个数据框是否相同
#取出子集
a2r <- subset(iris, grepl("^se", Species))#取出物种列中以se开头的数据子集
a2s <- sqldf("select * from iris where Species like 'se%'")#取出数据的子集,关键词like
all.equal(as.data.frame(a2r), a2s)#检验数据是否有差异
#指定某变量值为两个以上时的提取
a3r <- subset(iris, Species %in% c("setosa", "virginica"))#在iris数据集中,选出量物种是setosa和virginica的行
a3s <- sqldf("select * from iris where Species in ('setosa', 'virginica')")#注意单引号和双引号
row.names(a3r) <- NULL#a3r选的是子集,因而行名还是与原数据集相同
identical(a3r, a3s)
#指定某变量范围时数据集的提取
a4r <- subset(iris, Petal.Length >= 0 & Petal.Length <= 2.0)#选取breaks在20到30之间的数据
a4s <- sqldf("select * from iris where Petal.Length between 0 and 2.0", row.names = TRUE)#使用row.names=TRUE可以不把行名重命名
iris$Petal.Length
#数据合计
a5r <- aggregate(iris[1:2], iris[5], mean)#计算出了3个物种前两个变量的平均值
a5s <- sqldf('select Species, avg("Sepal.Length") `Sepal.Length`, avg("Sepal.Width") `Sepal.Width` from iris group by Species')#关键词group by
all.equal(a5r, a5s)#查看数据是否相同
# 提取某变量breaks从小到大排序后的前3行的数据,除数据属性和列名外相同
head(warpbreaks)
a6r <- head(warpbreaks[order(warpbreaks$breaks), ], 3)
a6s <- sqldf("select * from warpbreaks order by breaks limit 3")
# attributes(a6r) <- attributes(a6s) <- NULL#去除属性
row.names(a6r) <- NULL#去除列
identical(a6r, a6s)
# 提取某变量breaks从大到小排序后的前3行的数据,除数据属性和列名外相同
a7r <- head(warpbreaks[order(warpbreaks$breaks, decreasing = TRUE), ], 3)
a7s <- sqldf("select * from warpbreaks order by breaks desc limit 3")#关键词order by,desc表示降序
row.names(a7r) <- NULL
identical(a7r, a7s)
数据分析咨询请扫描二维码