接下来,我们利用sqldf包来处理分组汇总的问题。
由于sqldf包不是R语言自带的,所以先用以下代码安装sqldf包:
install.packages("sqldf")
然后选择“China(Beijing)”镜像站点进行安装,R语言会同时自动安装“sqldf”包的依赖包。
安装好销历sqldf包及其依赖包后,输入以下代码加载sqldf包:
library(sqldf)
一切准备就绪,接下来用sqldf统计每个同学的总成绩和平均分:
sqldf("select name,sum(score) as score_sum,avg(score) as score_avg from Mydata group by name")
统计每个班级的总成绩:
sqldf("select class,sum(score) as score_sum from Mydata group by class")
统计每个班级的每门课程的总成绩亏迅搜和平均分:
sqldf("select class,course,sum(score) as score_sum,avg(score) as score_avg from Mydata group by class,course")
R中还有一个有趣的sqldf包,它可以让你用SQL来 *** 作dataframe,这种功能能让会R的人能练习SQL,会SQL的人能练习R,不得不感叹R语言的强大技能和神奇魅力。当然也可以将R与外部数据库连接,直接闹好在R中 *** 作数据库,并生成最终结果,这也是一种可行的方法。在R中连接数据库需要安装其它的扩展包,根据连接方式不同我们有两种选择:一种是ODBC方式,需要安装RODBC包并安装ODBC驱动。另一种是DBI方式,可以根据已经安装的数据库类型来安装相应的驱动。因为后者保留了各数据库原本的特性,所以个人比较偏好用DBI连接方式。有下面这几种主要的包提供了DBI连接:RMySQL,RSQLite,ROracle,RPostgreSQL。由名字看得出它们分别对应了几种主流的数据库。
注:以上文字来自R-blogger—–《在R语言中使用SQL》
值得一提的是在运用sqldf包时可能要对R软件升级到3.1.0版以上,否则安装不会成功,这里简单介绍一种在Windows环境下对R软件自动升级的方法。
Windows上升级R语言:
install.packages("installr")
library(installr) #加载包
updateR()
之后选择“确定”就可以自动更新了
虽然在R语言中有很多优秀的函数如aggregate()和daply()可以对数据框统计,但sql功能强大,不仅能实现数据的清洗者侍、统计、运算,还可以实现数据存储、控制、定义和调用。越来越多的公司在招聘的时候都要求数据分析师除了要掌握统计建模和数据挖掘的理论方法和编程能力外,还要求其具备使用sql的能力,楼主也在积极学习sql当中。
下面是我利用sqldf()完成的一些程序,虽然简单,但这是学习的第一步
>name<-c(rep('张三',1,3),rep('李四',3))
>subject<-c('数学首弯吵','语文','英语','数学','语文','英语')
>score<-c(89,80,70,90,70,80)
>stuid<-c(1,1,1,2,2,2)
>stuscore<-data.frame(name,subject,score,stuid)
>library(sqldf)
1.计算每个人的总成绩并排名(要求显示字段:姓名,总成绩)
>sqldf('select name,sum(score) as allscore from stuscore group by name order by allscore')
name allscore
1 张三 239
2 李四 240
2.计算每个人的总成绩并排名(要求显示字段: 学号,姓名,总成绩)
>sqldf('select name,stuid,sum(score) as allscore from stuscore group by name order by allscore')
name stuid allscore
1 张三 1 239
2 李四 2 240
3.计算每个人单科的最高成绩(要求显示字段: 学号,姓名,课程,最高成绩)
>sqldf('select stuid,name,subject, max(score) as maxscore from stuscore group by stuid')
stuid name subject maxscore
1 1 张三数学 89
2 2 李四数学 90
4.计算每个人的平均成绩(要求显示字段: 学号,姓名,平均成绩)
>sqldf('select stuid,name,subject, avg(score) as avgscore from stuscore group by stuid')
stuid name subject avgscore
1 1 张三英语 79.66667
2 2 李四英语 80.00000
5.列出各门课程成绩最好的学生(要求显示字段: 学号,姓名,科目,成绩)
>sqldf('select stuid,name,subject,max(score) as maxscore from stuscore group by subject order by stuid')
stuid name subject maxscore
1 1 张三语文 80
2 2 李四数学 90
3 2 李四英语 80
8.列出各门课程的平均成绩(要求显示字段:课程,平均成绩)
>sqldf('select subject,avg(score) as avgscore from stuscore group by subject')
subject avgscore
1数学 89.5
2英语 75.0
3语文 75.0
把表示时间的字符串转成时间类型数据,在R语言里面有两个基本的函圆返数: as.POSIXlt() 和 as.POSIXct()。两者滑者都是S3泛型函数,根据参数的数据类型选择不同的转换方法,除字符串外还能够转换数字、因子等数据类型首腔腊,适应性很强!欢迎分享,转载请注明来源:内存溢出
评论列表(0条)