Article Image
Loading Data by R

R导入Excel数据

  • 读取Excel数据最简单最实用的方式有两种,一种是直接复制原数据,然后在命令行输入read.table("clipboard");另一种更好的方式是在Excel中将其导出为一个逗号分隔文件(csv),并使用read.table(read.csv)的方式将其导入R中。

  • 在windows系统中,我们也可以使用RODBC包来访问Excel文件:

install.pachages("RODBC")
library(RODBC)
channel <- odbcConnectExcel("myfile.xls")
mydataframe <- sqlFetch(channel, "mysheet")
odbcClose(channel)

哎呀,我的电脑是64位的,貌似odbc不能用?Noproblem,用32bit的R(R默认会安装64bit和32bit,在程序中用32bit的R启动即可)进行启动,再安装RODBC包就可以正常使用odbcConnectExcel读取xls数据就正常了,这个bug在后面读取数据库中的数据时还会出现。RODBC还有很多的函数可以操纵数据(包括SQL)

  • Excel2007 使用了一种名为XLSX的文件格式,而xlsx包可以来读取这种格式的电子表格。其调用格式为read.xlsx(file,n),file是文件所在路径,n为要导入的工作表序号。

  • 还有一个操纵Excel数据的重要的R包XLConnect,以后再慢慢琢磨吧。。。


R 和 MySQL的恩与仇

R语言连接数据库可以利用数据库的存贮能力和R的计算能力,起到取长补短的效果

  • windows平台使用odbc的方式,可见R连接MySQL数据库方法备忘.

  • 这里我要介绍另外一个R包-DBI,DBI包为访问数据库提供了一个通用且一致的客户端接口,基于DBI的包有RMySQLROracleRSQLite等,这些包都为对应的数据库提供了原生的数据库驱动,但可能不是在所有系统上都可用。基于RMySQL包,通过R与MySQL来访问数据相当便捷,接下来,就让我们来一探究竟: 1.Connecting and Listing databases

library(RMySQL)
## Loading required package: DBI
ucscDb <- dbConnect(MySQL(), user = "genome", host = "genome-mysql.cse.ucsc.edu")
result <- dbGetQuery(ucscDb, "show databases;")
dbDisconnect(ucscDb)
## [1] TRUE

这里的MySQL数据库是一个可以供用户访问的远程数据库,我们也可以访问自己本地的数据库文件,对了,作为一个好孩子,在每次建立一个查询后,我们都应该关闭建立的查询。

2.Connecting to hg19 and listing tables

hg19 <- dbConnect(MySQL(),user = "genome", db = "hg19", host = "genome-mysql.cse.ucsc.edu")
allTables <- dbListTables(hg19)
allTables[1:5]
## [1] "HInv"         "HInvGeneMrna" "acembly"      "acemblyClass"
## [5] "acemblyPep"
dbListFields(hg19,"affyU133Plus2")
##  [1] "bin"         "matches"     "misMatches"  "repMatches"  "nCount"     
##  [6] "qNumInsert"  "qBaseInsert" "tNumInsert"  "tBaseInsert" "strand"     
## [11] "qName"       "qSize"       "qStart"      "qEnd"        "tName"      
## [16] "tSize"       "tStart"      "tEnd"        "blockCount"  "blockSizes" 
## [21] "qStarts"     "tStarts"
dbGetQuery(hg19,"select count(*) from affyU133Plus2")
##   count(*)
## 1    58463
query <- dbSendQuery(hg19, "select * from affyU133Plus2 where misMatches between 1 and 3")
affyMis <- fetch(query, n=10)
quantile(affyMis$misMatches)
##   0%  25%  50%  75% 100% 
##  1.0  1.0  1.5  3.0  3.0
dbClearResult(query)
## [1] TRUE
dim(affyMis)
## [1] 10 22
dbDisconnect(hg19)  
## [1] TRUE

dbGetQuery和dbSendQuery的区别是前者可以直接获得查询内容,后者只能建立一个查询,不返回任何内容。 SQL语句是操纵数据库数据的基础,关于RMySQL的更多学习内容,请参考MySQl and R.

如何从网页爬取数据

R可以在网页上抓取数据,一种途径是使用函数readlines()下载网页,然后使用如grep()和gsub()一类的函数处理,对于结构复杂的网页,可以使用RCurl和XML包及httr包来提取其中想要的信息。 更多信息和示例,参考kindle榜小爬虫

Blog Logo

louis


Published

Image

黑曼巴

篮球赛场,博客舞台,“黑曼巴”精神永驻...

Back to Overview