用R获取数据

来源:互联网 发布:中国进口台湾数据 编辑:程序博客网 时间:2024/04/27 23:39

R作为一个开放的系统,它与其他应用软件,尤其是数据处理软件,比如Excel,SPSS等有着密切的资源共享性,相互之间进行数据调用非常方便。下面就常见的几种读取数据的方法进行分类描述,内容持续更新。。。


我们在每次开始用R进行工作前,可以先考虑使用setwd()函数设定常用工作路径,以省去之后可能需要的多次指定文件获取、修改、保存路径的操作,或者在每次读取时设置路径都可以。


1.读取.csv文件

csv是逗号分隔值文件格式,csv(逗号分隔值)是一种用来存储数据的纯文本文件,通常都是用于存放电子表格或数据的一种文件格式。

本例中用到的数据集是来自于R下MASS包中的Insurance.csv文件。文件位置一般在包的安装目录下的data文件夹下。例如下图是我电脑中的Insurance.csv文件存放位置。



> setwd("D://R包//MASS//data")                 #设置默认路径> write.csv(Insurance,"Insurance.csv")         #将Insurance数据集以csv格式存入指定路径> Insur=read.csv("Insurance.csv")              #使用read.csv()函数直接读取> head(Insur)                                   #查看读取到的部分数据  X District  Group   Age Holders Claims1 1        1    <1l   <25     197     382 2        1    <1l 25-29     264     353 3        1    <1l 30-35     246     204 4        1    <1l   >35    1680    1565 5        1 1-1.5l   <25     284     636 6        1 1-1.5l 25-29     536     84> 



也可使用read.table()函数读取数据

> Insur_1=read.table("Insurance.csv")      #<span style="color: rgb(51, 51, 51); font-family: 'Microsoft Yahei', Tahoma, Simsun; font-size: 15px; line-height: 27px;">使用read.table()函数读取数据</span>> head(Insur_1)                            #查看读取到的部分数据  V1                                           V21 NA ,"District","Group","Age","Holders","Claims"2  1                      ,"1","<1l","<25",197,383  2                    ,"1","<1l","25-29",264,354  3                    ,"1","<1l","30-35",246,205  4                    ,"1","<1l",">35",1680,1566  5                   ,"1","1-1.5l","<25",284,63> 
可以看出,用专门读取CSV格式的函数read.csv()与一般的读取数据函数read.table()是不同的,这是因为两函数中控制参数的默认值不同。如果想用read.table()函数输出read.csv()函数那样的格式,可以在read.table()设置参数.具体步骤如下

> Insur_2=read.table("Insurance.csv",header=TRUE,sep=",")    #更改函数设置> head(Insur_2)  X District  Group   Age Holders Claims1 1        1    <1l   <25     197     382 2        1    <1l 25-29     264     353 3        1    <1l 30-35     246     204 4        1    <1l   >35    1680    1565 5        1 1-1.5l   <25     284     636 6        1 1-1.5l 25-29     536     84> 

2:读取.sav文件

读取.sav文件,我们可以用foregin加载包中的read.spss()函数来读取文件,可是中间过程遇到了“ position 0: Variable name begins with invalid character”,百度了一下问题所在,说是问题出在spss文件的变量名命名规则与R中的不同,出现了R中非法字符,但我把名称修改了之后依旧是这个错误。很无奈。所幸在搜索的过程中又找到了一个新的方法。留个解决方法吧,方便以后遇到这个问题的童鞋查找。
foreign包和Hmisc包的读取sav文件的函数兼容性不太好,可以使用memisc包中的方法搞定:

install.packages("memisc")  # 安装memisc包(支持中文命名)library(memisc)
setwd(".sav路径")data0 = as.data.set(spss.system.file("你的spss文件名.sav"))data = as.data.frame(data0)  # data即为所要的数据

3.读取.xls文件

从Excel直接获取数据最好的方式是将其转化为.csv格式,再用读取csv格式文件的方法获取数据。但在Windows系统中我们也可以选择使用RODBC软件包中的相关函数来实现。本次用到的.xls文件内容如下:


首先加载RODBC软件包,本地没有的可以先去下载,下载完成后再输入下面这句话,完成加载

> library(RODBC) > ch=odbcConnectExcel(file.choose()) #输入这句话后会显示出一个选择窗口,直接点击你需要读取的.xls文件即可。(注意:odbcConnectExcel()只能在32bit上的电脑操作系统上使用)> ch                                                              #显示连接信息RODBC Connection 1Details:  case=nochange  DBQ=D:\R包\stata.xls  DefaultDir=D:\R包  Driver={Microsoft Excel Driver (*.xls)}  DriverId=790  MaxBufferSize=2048  PageTimeout=5> sqlTables(ch)                                         #显示出从ODBC中连接到的表格       TABLE_CAT TABLE_SCHEM TABLE_NAME   TABLE_TYPE REMARKS1 D:\\R包\\stata        <NA>    Sheet1$ SYSTEM TABLE    <NA>2 D:\\R包\\stata        <NA>    Sheet2$ SYSTEM TABLE    <NA>3 D:\\R包\\stata        <NA>    Sheet3$ SYSTEM TABLE    <NA>> Insur=sqlFetch(ch,"Sheet1")                    #读取表格中的Sheet1(也可根据自己的需求打开),并储存与Insur> odbcClose(ch)                                              #关闭连接> head(Insur)                                                    #读取Insur中的前若干条数据,或者直接用> Insur读取全部数据     时间 房价指数 建材价格指数1 2000-q1    100.7         98.02 2000-q2    101.1         98.23 2000-q3    101.5         98.44 2000-q4    101.2         98.65 2001-q1    101.9         99.96 2001-q2    102.5         99.9> 


在Mac  OS或Linux,则可以使用gdata加载包中的read.xls()函数来读取Excel数据,本文不做论述。

4.读取txt文件

TXT是最常见的文本格式,在储存数据时以制表符(即Tab)为分割符,我们同样可以使用read.table()和read.csv()函数对该格式进行读取

本例中用到的文本文件见下图

> setwd("D://R包")> Insur_txt=read.table("stata.txt")            #使用read.table()函数直接读取> head(Insur_txt)       V1    V2   V31 2000-q1 100.7 98.02 2000-q2 101.1 98.23 2000-q3 101.5 98.44 2000-q4 101.2 98.65 2001-q1 101.9 99.96 2001-q2 102.5 99.9> > Insur_txt1=read.csv("stata.txt",header=TRUE,sep="") #使用read.csv()函数> head(Insur_txt1)  X2000.q1 X100.7   X981  2000-q2  101.1  98.22  2000-q3  101.5  98.43  2000-q4  101.2  98.64  2001-q1  101.9  99.95  2001-q2  102.5  99.96  2001-q3  102.7 100.1> 


综上所述,read.csv()函数和read.table()函数差别所在之处,在于读取以其他固定分隔符来作为数据间隔的文件。

5.获取网页数据

下面我们使用XML软件包中的readHTMLTable()函数来读取网页数据,我们以获取和讯网中万科股票的相关金融数据为例,数据所在地址:点击打开链接


> install.packages(XML)
<span style="font-family: Arial, Helvetica, sans-serif;">>library(XML)                                                                                                                                                                                #安装并加载XML包</span>
> u1="http://stockdata.stock.hexun.com/2008en/zxcwzb.aspx?stockid=000002&type=0&adate=2013.06.30"   #将待读取的页面网址存入变量u1> table1=readHTMLTable(u1)                                                                          #将数据读取结果存入到变量table1> names(table1)                                                                                      #显示table1各维度名称[1] "NULL" "NULL" "NULL" "NULL"> table1[[2]]                                                                                       #读取table1第2维度中的内容                                      Period End Date       June 30 20161                                   Operating  Income  74,795,294,306.292                                          Net Profit   5,351,309,986.083                                        Total Profit   9,980,342,845.594            Net Profit Excluding Extraordinary Items   5,335,845,153.105                                        Total Assets 712,306,691,248.756                                Shareholders' Equity  97,460,727,287.977            Net Cash Flows From Operating Activities  25,797,213,427.978                            Basic Earnings Per Share               0.489                        The Rate Of Return On Equity               5.4910 Net Cash Flows From Operating Activities Per Share               2.3411                         Net Assets Value Per Share               8.8312                Net Assets Per Share After Adjusted               0.0013   Foreign Financial Accounting Standard Net Profit               0.0014                  EPS Excluding Extraordinary Items               0.4815                                  Report Start Time         2016-01-0116                                    Report End Time         2016-06-30        March 31 20161   14,611,312,019.582      833,232,885.763    1,687,268,595.754      805,115,190.875  658,837,478,395.546  100,636,736,796.097  -10,726,129,132.788                0.089                0.8310              -0.9711               9.1212               0.0013               0.0014               0.0715         2016-01-0116         2016-03-31> 


0 0
原创粉丝点击