
R中还有一个有趣的sqldf包,它可以让你用SQL来 *** 作dataframe,这种功能能让会R的人能练习SQL,会SQL的人能练习R,不得不感叹R语言的强大技能和神奇魅力。 \x0d\ 当然也可以将R与外部数据库连接,直接在R中 *** 作数据库,并生成最终结果,这也是一种可行的方法。在R中连接数据库需要安装其它的扩展包,根据连接方式不同我们有两种选择:一种是ODBC方式,需要安装RODBC包并安装ODBC驱动。另一种是DBI方式,可以根据已经安装的数据库类型来安装相应的驱动。因为后者保留了各数据库原本的特性,所以个人比较偏好用DBI连接方式。有下面这几种主要的包提供了DBI连接:RMySQL,RSQLite,ROracle,RPostgreSQL。由名字看得出它们分别对应了几种主流的数据库。 \x0d\ 注:以上文字来自R-blogger—_《在R语言中使用SQL》 \x0d\ 值得一提的是在运用sqldf包时可能要对R软件升级到310版以上,否则安装不会成功,这里简单介绍一种在Windows环境下对R软件自动升级的方法。 \x0d\ Windows上升级R语言:\x0d\ installpackages("installr"); \x0d\ library(installr) #加载包\x0d\ updateR()\x0d\\x0d\之后选择“确定”就可以自动更新了 \x0d\ 虽然在R语言中有很多优秀的函数如aggregate()和daply()可以对数据框统计,但sql功能强大,不仅能实现数据的清洗、统计、运算,还可以实现数据存储、控制、定义和调用。越来越多的公司在招聘的时候都要求数据分析师除了要掌握统计建模和数据挖掘的理论方法和编程能力外,还要求其具备使用sql的能力,楼主也在积极学习sql当中。 \x0d\ 下面是我利用sqldf()完成的一些程序,虽然简单,但这是学习的第一步\x0d\> name subject score stuid stuscore library(sqldf)\x0d\\x0d\1计算每个人的总成绩并排名(要求显示字段:姓名,总成绩)\x0d\> sqldf('select name,sum(score) as allscore from stuscore group by name order by allscore')\x0d\ name allscore\x0d\1 张三 239\x0d\2 李四 240\x0d\\x0d\2计算每个人的总成绩并排名(要求显示字段: 学号,姓名,总成绩)\x0d\> sqldf('select name,stuid,sum(score) as allscore from stuscore group by name order by allscore')\x0d\ name stuid allscore\x0d\1 张三 1 239\x0d\2 李四 2 240\x0d\\x0d\3计算每个人单科的最高成绩(要求显示字段: 学号,姓名,课程,最高成绩)\x0d\> sqldf('select stuid,name,subject, max(score) as maxscore from stuscore group by stuid')\x0d\ stuid name subject maxscore\x0d\1 1 张三 数学 89\x0d\2 2 李四 数学 90\x0d\\x0d\4计算每个人的平均成绩(要求显示字段: 学号,姓名,平均成绩)\x0d\> sqldf('select stuid,name,subject, avg(score) as avgscore from stuscore group by stuid')\x0d\ stuid name subject avgscore\x0d\1 1 张三 英语 7966667\x0d\2 2 李四 英语 8000000\x0d\\x0d\5列出各门课程成绩最好的学生(要求显示字段: 学号,姓名,科目,成绩)\x0d\> sqldf('select stuid,name,subject,max(score) as maxscore from stuscore group by subject order by stuid')\x0d\ stuid name subject maxscore\x0d\1 1 张三 语文 80\x0d\2 2 李四 数学 90\x0d\3 2 李四 英语 80\x0d\\x0d\8.列出各门课程的平均成绩(要求显示字段:课程,平均成绩)\x0d\> sqldf('select subject,avg(score) as avgscore from stuscore group by subject')\x0d\ subject avgscore\x0d\1 数学 895\x0d\2 英语 750\x0d\3 语文 750
对于有SQL背景的R语言学习者而言,sqldf是一个非常有用的包,因为它使我们能在R中使用SQL命令。只要掌握了基本的SQL技术,我们就能利用它们在R中 *** 作数据框。关于sqldf包的更多信息,可以参看cran。
在这篇文章中,我们将展示如何在R中利用SQL命令来连接、检索、排序和筛选数据。我们也将展示怎么利用R语言的函数来实现这些功能
>
开始一个新的R语言数据分析新项目,管理脚本、、文件的推荐方式:打开Rstudio,新建Rproject,新建脚本(脚本存放在生成的Rproject文件夹中)。
若要逆着优先顺序 *** 作,将返回NA
x %in%y是判断x中的每一个元素是否在y中存在。
若x和y长度不一致,返回x个TRUE或者FALSE。
⚠️练习:按如下方式生成test数据框,提取test中,最后一列值为a或c的行,组成一个新的数据框,赋值给test2。
这里如果使用==来判断,就相当于拿test$n的15个值与c('a','c')的2个值来一一对应着比对,因为两者长度不同,会发生循环补齐,其效果如下图,明显不是我们想要的结果。
x%in%y:选出x是y中一个值时的所有行
另:取交集、差集、并集的函数为:intersect(x,y)、union(x,y)、setdiff(x,y)、setdiff(y,x)
match函数的用法参考: >
是指sql之类的数据库吗,可以用RODBC包与数据库连接,将数据库中的表读入R中,接下来就可以按照常规的代码解决问题了,也可以安装sqldf包,这样就可以在R中用sql语句对数据 *** 作。
installpackages("RODBC")
library(RODBC)
在R中有 6中索引编写方式 ,包括 正整数、负整数、零、空格、逻辑值、名称
与正整数索引相反,它的含义是 不包含 负整数索引所对应的元素。
说实话,零索引并没有多大用处。这里就不介绍了
代表选取该索引位置所代表维度的所有元素。
当索引提供一个包含TRUE和FALSE逻辑值的向量时,R会匹配索引值为TRUE的元素。 此索引方式非常重要
编写一个可以返回第一行所有元素的函数
问题:这样每次发牌都是黑桃K,所以我们要在每次发完牌后进行洗牌,然后再发,现在写一个洗牌的函数
下面写一个输入进去deck输出一个洗牌后的数据框的函数
$ 可以提取数据框或列表对象中的值。
列表提取元素
掌握R语言的索引,最基本 *** 作为 写出对象名字,并在随后中括号里写出对应的索引即可 。若对象是一维的,如向量,只需要提供一个位置索引;若对象是二维的,如数据框,则提供两个位置索引,中间用逗号隔开。n维则用n个索引。另外数据框和列表还可用 $ 来索引。
数据准备
向一个数值型向量中添加一个字符串会将此向量中的所有元素转换为字符型。
isdatatype()用于判断数据类型,返回值为TRUE或FALSE,常见类型包括数值型numeric、字符型character、逻辑型logical、数据框dataframe等。 asdatatype()可将数据类型进行转化。
查看数据类型:mode(), class(), typeof(), storagemode()
逻辑值转换成数值时,TRUE转换成1,FALSE转换成0。
函数:order(x,decreasing=F,nalast=NA)
x是要排序的数据,可以是数据框也可以是向量,decreasing=F是默认升序,在排序变量前加一个减号可得到降序排序结果,nalast =NA表示将NA元素移到最后,否则,将NA放在第一个。
函数:cbind(A, B) ,不需要指定一个公共索引对数据框进行合并。
cbind:根据列进行合并,即叠加所有列,m列的矩阵与n列的矩阵cbind()最后变成m+n列,合并前提:cbind(a, c)中矩阵a、c的行数必需相符。
merge(A, B) :横向合并两个数据框(数据集),在多数情况下,两个数据框是通过一个或多个共有变量进行联结的(即一种内联结,inner join)。
rbind(A, B) :纵向合并两个数据框(数据集),两个数据框必须拥有相同的变量,不过它们的顺序不必一定相同。
rbind:根据行进行合并,就是行的叠加,m行的矩阵与n行的矩阵rbind()最后变成m+n行,合并前提:rbind(a, c)中矩阵a、c的列数必需相符。
函数:dataframe[row indices, column indices] dataframe为要索引的数据框,[]中,前面的是行,后面是列。
在某一列或行的下标之前加一个减号(-)就会剔除那一列或行。
subset(x, subset, select, drop = FALSE, )
x是要进行 *** 作的数据框,subset是对数据的某些字段进行 *** 作,select是选取要显示的字段。
sample(x, size, replace = FALSE, prob = NULL)
x表示所要抽样数据,size表示抽样元素个数,replace为T表示采取有重复的抽样,prob用于指定抽样的概率。
参考资料:
数据框(dataframe)是R中最常处理的数据结构。
函数:dataframe(col1,col2,col3,,rowname=NULL, checkrows = FALSE, checknames=TRUE, stringsAsFactors = defaultstringsAsFactors())
其中的列向量col1, col2, col3,可为任何类型(如字符型、数值型或逻辑型),每一列的名称可由函数names指定;
rowname用于指定各行(样本)的名称,默认没有名称,使用从1开始自增的序列来标识每一行;
checkrows用于用来检查行的名称和数量是否一致,默认为FALSE;
checknames来检查变量(列)的名称是否唯一且符合语法,默认为TRUE;
stringsAsFactors用来描述是否将字符型向量自动转换为因子,默认转换,若不改变的话使用stringsAsFactors = FALSE来指定即可。
每一列数据的模式必须唯一,不过你却可以将多个模式的不同列放到一起组成数据框。
先构建向量,再组成数据框。
直接用dataframe函数构建数据框。
R语言的下标索引是从1开始的,且下标索引为负数的话表示删除某个元素。
[] 可进行索引,括号内对应的是[行下标, 列下标]。
[1] 1 2 3 4 5 6 7 8
[1] "four"
[1] 1 2 3 4 5 6 7 8
[1] "four"
[1] 1 2 3 4 5 6 7 8
[1] "one" "two" "three"
attach、detach和with()
函数attach()可将数据框添加到R的搜索路径中。
函数detach()将数据框从搜索路径中移除。
函数attach()和detach()最好在你分析一个单独的数据框,并且不太可能有多个同名对象时使用。
with()就是把所有 *** 作都限制在数据框上。
The following objects are masked by GlobalEnv:
[1] 1 2 3 4 5 6 7 8
[1] "n1" "n2" "n3" "n4" "n5" "n6" "n7" "n8"
[1] 8
[1] 3
[1] 8
[1] "name" "values" "values2"
[1] "r1" "r2" "r3" "r4" "r5" "r6" "r7" "r8"
[1] 8 3
[1] "dataframe"
[1] "numeric"
[1] "character"
Length:8 Min :100 Min :100
Class :character 1st Qu:275 1st Qu:275
Mode :character Median :450 Median :450
Mean :450 Mean :450
3rd Qu:625 3rd Qu:625
Max :800 Max :800
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
前记:
正文:
第 一 部分: 5种数据对象类型
11 向量(vector)
12 矩阵(matrix)
向量+维度属性(nrow ncol)
13 数组(array)
与矩阵相似,但维度可大于2(说白了元素都是数 维度随便设)
14 列表(list)
可以包含不同类型
15 因子(factor)
整数向量+标签
16 缺失值(missing value)
NA:各种类型的缺失值
NAN:数值型的缺失值
NAN 属于 NA
isna 和 isnan 判断向量中是否有缺失值
17 数据框(dataframe)
存储表格数据,视为各元素长度相同的 列表
18 日期与时间(date, time)
日期
时间
POSIXct 整数 常用于存入数据框
POSIXIt 列表 还包括年月日等信息
后续请参考:
R语言基础之第 二 部分 : *** 纵数据 取子集
R语言基础之第 三 部分:重要函数 apply族函数 的使用
R语言基础之第 四 部分 : 排序
R语言基础之第 五 部分 : 总结数据信息
以上就是关于如何在R语言中使用SQL语句全部的内容,包括:如何在R语言中使用SQL语句、如何在R语言中使用SQL命令、R语言细节汇总等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)