Loading data by R
Louis
March 15, 2016
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的包有RMySQL、ROracle、RSQLite等,这些包都为对应的数据库提供了原生的数据库驱动,但可能不是在所有系统上都可用。基于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榜小爬虫