第五章R语言数据读写
人生的选择很多,选择代表了对某种事物的把握,也注定要失去另一些领域的体验,这就是机会成本。在踏入人生漫无边际的孤独与荒凉时,若能够凭借当初的记忆为自己点亮一盏灯前行,也是一种很好的修行。学习R语言的路,有时候也是孤独的、漫长的,在茫茫的黑夜中,唯有自己给自己打气加油方能继续前行。只要每一步都走的坚定,回过头来看,你已经站在远山之上。今天开始,我们就真正踏进数据的领域,去探索和发现。
1.设置工作目录
R语言在读写文件的时候,路径及当前工作目录是非常重要的,大部分初学者也会在这里栽跟头。往往令人郁闷的是,看到别人的博文贴出了程序和结果都是正常,为什么将文中的代码复制到自己的电脑却提示有错误,尝试了多次都不行的时候,就要开始怀疑人生了。这里给大家介绍一些工作目录的设置情况。想要获得当前目录,使用函数getwd,例如,
>WD
>WD
[1]"D:/RYUYAN"
想要设置当前目录,使用函数setwd,函数,例如,我们想将当前工作目录设置为桌面,
>setwd("C:/Users/wjilin/Desktop")
>WD
>WD
[1]"C:/Users/jilin/Desktop"
需要注意的是,一方面,“/”和“\”的意义不一样,在设置路径代码中,可以选择“/”隔开父子文件夹,也可以用“\\”隔开父子文件夹,所以直接粘贴Windows系统文件目录:“C:\Users\jilin\Desktop”会报错。
> setwd("C:\Users\wjilin\Desktop")
Error: '\U' used without hex digits in character string
starting ""C:\U"
另一方面,这样设置的R当前工作目录是临时的。在你关闭R窗口,再重新打开,又会变为之前默认的设置。如何能够保证每次R打开后的工作目都是指定一个文件夹呢?可以这样设置,右键单击R桌面快捷方式图标,选择属性,弹出对话框(如下图),在起始位置中填入你需要的设置的工作目录即可。
2.读数据的方法简介
2.1从excel读数据
从excel读取数据,方法很多,在这里介绍几种常用的方法。
(1)用read.table函数,从剪切板读入数据。假设我们要从文件sdebankplace.xlsx中将顺德农商银行网点相关数据读入到R中,打开Excel文件—>选中数据—>复制,执行以下命令即可。
>sdebankplace=read.table("clipboard",header=T)
>head(sdebankplace,1)#查看第一行数据
网点名称 地址 纬度 经度 电话
1顺德区农村商业银行(新桂支行)大良街道东乐路新桂中路 22.84094 113.2783
(2)利用RODBC包读取excel文件。RODBC包里含有很多函数,不仅有excel的,还有access的。下面我们读取我们刚刚的sdebankplace.xlsx文件。
>channel1=odbcConnectExcel("sdebankplace.xlsx")#建立链接
>sdebankplace=sqlFetch(channel1,"sdebankplace")#获取sdebankplace表的数据
需要注意的是,这里的函数只支持32位的R,如果你的R是64位的,则会出现错误,如,
>channel1=odbcConnectExcel("sdebankplace.xlsx")
Error in odbcConnectExcel
("sdebankplace.xlsx"): odbcConnectExcel is only usable with 32-bit Windows
close(channel1)#在读完数据后关闭链接
(3)利用excel.link包读取excel文件。函数为xl.read.file(filename,header=TRUE),更多参数设置,可以查看函数帮助了解,下面我读取当前目录下的一个文件iris.xlsx。
>install.packages("excel.link")
>library(excel.link)
>iris1=xl.read.file("iris.xlsx",header=T)
> head(iris1,1)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
(4)用xlsx包读取excel文件。我们使用的函数为read.xlsx(file,sheetIndex),下面我读取当前目录下的一个文件sdebankplace.xlsx。
>install.packages("xlsx")
>library(xlsx)
>sdebankplace=read.xlsx("sdebankplace.xlsx",1,encoding='UTF-8')
需要注意的是,此包需要加载rJava包,但Rstudio不支持,因此只能在R本身中使用。此外,该函数的参数encoding需要设置,否则会出现乱码,如下。
>names(sdebankplace)
[1]"缃戠偣鍚嶇О""鍦板潃""绾.害""缁忓害""鐢佃瘽"
2.2从txt文档读数据
(1)从剪切板读取数据,同excel。
(2)用read.table函数,该函数有很多参数设置,请查看帮助了解具体情况。
sdebankplace=read.table("sdebankplace.txt",header=T)
(3)用readLines函数,可以逐行读取,
sdebankplace=readLines("sdebankplace.txt")
需要注意的是,readLines读取的结果与read.table的结果不同,需要进行加工才能提取想要的变量,因此,该函数经常用于读取文本文件等做中文分词之用,读取数据框或者矩阵类型的数据,一般不用该函数,如下,
2.3从csv格式文档读数据
(1)从剪切板读取数据,同excel。
(2)用read.csv,该函数与read.table函数基本一样。
sdebankplace=read.csv("sdebankplace.csv",header=T)
(3)如果想批量读取当前目录文件夹下的文件,可以采取如下措施。
filenames
data=NULL
for(i in 1:length(filenames)){
data[i]=lapply(filenames[i],function(name){ read.csv(paste("D:/RYUYAN/",name,sep=""),header=T)
})
}
> head(data[[1]])
city NAME_2 youeryuan
1 安庆市 Anqing 91
2 蚌埠市 Bengbu 99
3 亳州市 Bozhou 149
4 巢湖市 Chaohu 112
5 池州市 Chizhou 97
6 滁州市 Chuzhou 258
2.4从其他格式文档读数据
对于S-Plus,SAS,SPSS,stata的文件格式,R也可以读取,需载入foreign包。
install.packages("foreign")
library(foreign)
data.restore("filename")#读入S-Plus以data.dump输出的文件
read.S("filename")#读入S-Plus二进制数据文件
read.xport("filename")#读入SAS(Export)的数据文件
read.ssd("...")#读入SAS.ssd文件
read.spss("filename")#读入SPSS以save或export输出的数据文件
read.dta("filename")#读入stata数据文件
需要注意的是,foreign包只能读取STATA12及以下版本的数据,R如何读入STATA12版本以上的数据。可以加载readstata13或haven包。具体函数参数设置可以查看帮助文档。
library(readstata13)
install.packages("haven")
library(haven)
read.dta13("filename")
read_dta("filename")
2.5从数据库读读数据
R对于基于SQL语言的关系型数据库有良好的支持,这些数据库既有商业数据库Oracle、MicrosoftSQLServer、IBMDB2等,也包含在GNUGeneralPublicLicense(GPL)下发布的MySQL等开源数据库。RMySQL包中提供了到MySQL数据库的接口;RODBC包提供了更为广泛数据库接口的解决方案,支持所有标准ODBC接口的数据库。通过这种方式,相同的R代码可以方便地应用于不同类型的数据库。
> library(RODBC)
>myconn=odbcConnect("wjlTestSQL",uid="wjl",pwd="wjl123456")
> crimedat=sqlFetch(myconn,"city")
> head(crimedat,1)
ID Name CountryCode District Population
1 1 Kabul AFG Kabol 1780000
> citys=sqlQuery(myconn,"select * from city limit 1")
> citys
ID Name CountryCode District Population
1 1 Kabul AFG Kabol 1780000
3.写数据的方法简介
写文件和读文件基本上相似的反过程,这里就不在一一赘述了。涉及的主要函数如下图所示,可以查询函数帮助,运行示例,了解具体参数设置方法。
图文编辑 稀巴烂
极简 有感 干货
—稀巴烂数据挖掘—
领取专属 10元无门槛券
私享最新 技术干货