R语言扩展包xlsx() (01)

R语言扩展包xlsx() (01),第1张

xlsx()包,是一个可以让R读、写、格式化xlsx文件的扩展包。

为什么不用相对有更多教程的RODBC包?

最重要的原因是RODBC包只能在32位系统下运行,而我的是64位系统,无法运行RODBC;其次是xlsx()包允许设置excel单元格的格式,功能还比较强大。

前不久用xlsx()包写了两个 *** 作excel文件的脚本,遇到一些问题,将经验记录如下:

在读取的xlsx文件第一行是合并单元格时报错,无法通过调整startRow参数修改,只能手工删除第一行解决。

出现了很奇怪的问题,在用addDataFrame对工作表写入数据时,不管startRow怎么设置,总要往上抹掉一行,而且在下面一行会写入一行原来最早输入的第一行数据,再往下如果按照startRow是跳过的,也会在下面写入新数据,然后在startRow设定的行数开始写数据。

百思不得其解,删掉数据的行名、列名,不排序,用原来的数据,试了很久都不行。但之前对另一个表使用addDataFrame函数都是正常的,而且参数几乎一致。想到是不是工作表对象没有关闭,导致写入数据错乱?

关掉R环境,重新加载,一次成功。

教训:对同一个对象连续应用addDataFrame函数要特别小心,上一次的运行可能会影响下一次的结果。

R语言是一个强大的数据分析工具,其强大之处在于有各种各样的R包帮助其实现各种各样的功能。通常来说,R包的安装主要有四种方法,包括:1)从R语言官网上直接下载相关R包并安装;2)从Bioconductor上下载R包并安装;3)从Github上下载R包并安装;4)手动安装R包。其中前三种都是利用代码直接自动化下载并安装。

R语言 Bioconductor包的安装方法变更V39
Bioconductor提供了基因组大数据分析的工具,是开源的持续更新的项目。每年会有2次更新。
由于Bioconductor 包的更新与R并不同步,因此,请务必使用Bioconductor 的更新方式进行更新,以免程序出错。

曾经: Bioconductor包的安装方法是这样:

自上个版本后,Bioconductor 改进了安装方式,使用BiocManager包进行安装。

再也不用记Bioconductor 的网址了。。。

每次更新R版本后,记得运行

检测Bioconductor 包的更新。

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

一般的文本格式导入,都可以用readtable命令把数据扔进R里面。Excel和Spss数据的话,可用相应软件将文件打开,观察数据结构后将其复制到剪贴板,然后一样可以用readtable('clipboard')扔到R里面。如果文件太大不好复制,那么可以利用Excel和Spss的导出功能,将数据导出成文本格式。
还有一种情况就是,你的计算机上没有安装Excel或是Spss,这数据导入就要用到RODBC扩展包了。首先装载RODBC包。然后输入数据文件的绝对路径(要注意是用/而不是\)来定义连接,最后用数据抓取命令获取你需要的标签页数据内容(Sheet1)。
library(RODBC)
channel=odbcConnectExcel("d:/testxls")
mydata=sqlFetch(channel,'Sheet1')这样简单的两个步骤就可以将Excel数据导入R的mydata变量中。如果是Excel2007格式数据则要换一个函数
channel=odbcConnectExcel2007('d:/testxlsx')
mydata=sqlFetch(channel,'Sheet1')导入spss的sav格式数据则要用到foreign扩展包,加载后直接用readspss读取sav文件
library(foreign)
mydata=readspss('d:/testsav')上面的函数在很多情况下没能将sav文件中的附加信息导进来,例如数据的label,那么建议用Hmisc扩展包的spssget函数,效果会更好一些。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13375521.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-24
下一篇 2023-07-24

发表评论

登录后才能评论

评论列表(0条)

保存