首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

《R语言从0到1的蜕变》——第五章 R语言数据读写

第五章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.写数据的方法简介

写文件和读文件基本上相似的反过程,这里就不在一一赘述了。涉及的主要函数如下图所示,可以查询函数帮助,运行示例,了解具体参数设置方法。

图文编辑 稀巴烂

极简 有感 干货

—稀巴烂数据挖掘—

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171212G0ZU2Y00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券