R语言统计分析与应用
上QQ阅读APP看书,第一时间看更新

2.3 数据的输入

在数据分析过程中通常会面对来自多种数据源和数据格式的数据,需要将这些数据导入而进行数据分析,并汇报分析结果。R提供了适用范围广泛的数据导入工具。R可从键盘、文本文件、Microsoft Excel和Access、流行的统计软件、特殊格式的文件,以及多种关系型数据库中导入数据。本节将介绍各种数据源的导入方法。

2.3.1 使用键盘输入数据

输入数据最直接的方式就是使用键盘输入。R中的函数edit()会自动调用一个允许手动输入数据的文本编辑器,具体步骤如下。

(1)创建一个空数据框(或矩阵),其中变量名和变量类型需与预期中的最终数据集一致。

(2)针对这个数据对象调用文本编辑器,输入数据,并将结果保存回此数据对象中。

如下例所示:

        > newdata  <-data.frame(age=numeric(0), sex=character(0), weight=numeric(0))
        > newdata <-edit(newdata)

创建一个名为newdata的数据框,它含有3个变量:age(数值型)、sex(字符型)和weight(数值型)。然后调用文本编辑器,键入数据,最后保存结果。

在Windows上调用函数edit()的结果如图2-2所示。

▲图2-2 通过编辑器输入数据

重点提示:编辑的结果需要赋值回对象本身。函数edit()事实上是在对象的一个副本上进行操作的。如果不将其赋值到一个目标,所有修改将会全部丢失。

单击列的标题,就可以用编辑器修改变量名和变量类型(数值型、字符型)。你还可以通过单击未使用列的标题来添加新的变量。编辑器关闭后,结果会保存到之前赋值的对象中。再次调用newdata <−edit(newdata),就能够编辑已经输入的数据并添加新的数据。语句newdata <−edit(newdata)的一种简洁的等价写法是fix(newdata)。

这种输入数据的方式对于小数据集很有效。对于较大的数据集,这种方式的局限性就很明显了,可以考虑从现有的文本文件、Excel电子表格、统计软件或数据库中导入数据。

2.3.2 数据集的导入

1.从带分隔符的文本文件导入数据

可以使用read.table()从带分隔符的文本文件中导入数据。此函数可读入一个表格格式的文件并将其保存为一个数据框。其语法如下:

        mydata  <- read.table (file, header=TRUE, sep="delimiter", row.names="name")

其中,file是一个带分隔符的ASCII文本文件;header是一个表明首行是否包含了变量名的逻辑值(TRUE或FALSE);sep用来指定分隔数据的分隔符;row.names是一个可选参数,用以指定一个或多个表示行标识符的变量。

如下所示:

      > Example2_1  <- read.table ("example2_1.csv", header=TRUE, sep=",")
      > Example2_1
          group    atp
      1       1  7.76
      2       2 11.14
      3       3 10.85
      4       1  7.71
      5       2 11.60
      6       3  8.58
      7       1  8.43
      8       2 11.42
      9       3  7.19
      10      1  8.47
      11      2 13.85
      12      3  9.36
      13      1 10.30
      14      2 13.53
      15      3  9.59
      16      1  6.67
      17      2 14.16
      18      3  8.81
      19      1 11.73
      20      2  6.94
      21      3  8.22
      22      1  5.78
      23      2 13.01
      24      3  9.95
      25      1  6.61
      26      2 14.18
      27      3 11.26
      28      1  6.97
      29      2 17.72
      30      3  8.68

从当前工作目录中读入了一个名为example2_1.csv的逗号分隔文件,从文件的第一行取得了各变量名称,最后将结果保存到了名为Example2_1的数据框中。

注意:参数sep允许导入那些使用逗号以外的符号来分隔行内数据的文件。可以使用sep="\t"读取以制表符分隔的文件。此参数的默认值为sep="",即表示分隔符可为一个或多个空格、制表符、换行符或回车符。

默认情况下,字符型变量将转换为因子。但是有许多方法可以禁止这种转换行为,其中包括设置选项stringsAsFactors=FALSE,这将停止对所有字符型变量的此种转换。还有一种方法是使用选项colClasses为每一列指定一个类,例如logical(逻辑型)、numeric(数值型)、character(字符型)、factor(因子)。

2.导入Excel数据

读取一个Excel文件的最好方式就是在Excel中将其导出为一个逗号分隔文件(csv),并使用前文描述的方式将其导入R中。在Windows系统中,也可以使用RODBC包来访问Excel文件。电子表格的第一行应当包含变量/列的名称。

首先,下载并安装RODBC包:

        > install.packages("RODBC")

然后使用以下代码导入数据:

        > library(RODBC)
        > Example2_2  <- odbcConnectExcel("example2_2.xls")
        > mydata <- sqlFetch(Example2_2, "sheet1")
        > odbcClose (Example2_2)

这里的example2_2.xls是一个Excel文件,sheet1是要从这个工作簿中读取工作表的名称,channel是一个由odbcConnectExcel()返回的RODBC连接对象,mydata是返回的数据框。

3.导入SPSS数据

SPSS数据集既可以通过foreign包中的函数read.spss()导入R中,也可以使用Hmisc包中的spss.get()函数。函数spss.get()是对函数read.spss()的一个封装,它可以自动设置后者的许多参数,让整个转换过程更加简单一致,最后得到数据分析人员所期望的结果。

首先,下载并安装Hmisc包(foreign包已被默认安装):

        > install.packages("Hmisc")

然后使用以下代码导入数据:

        > library(Hmisc)
        > mydata  <- spss.get("mydata.sav", use.value.labels=TRUE)

在以上代码中,mydata.sav是要导入的SPSS数据文件,use.value.labels=TRUE让函数将带有值标签的变量导入为R中水平对应相同的因子,mydata是导入后的数据框。

4.导入SAS数据

R中有几个用来导入SAS数据集的函数,包括foreign包中的函数read.ssd()和Hmisc包中的函数sas.get()。但是,对于较新版本SAS(SAS 9.1或更高版本),这些函数并不能正常工作,因为R尚未跟进SAS对文件结构的改动。用户可以在SAS中使用PROC EXPORT将SAS数据集保存为一个逗号分隔的文本文件,然后将带分隔符的文本文件导入R中。

另外,Stat/Transfer软件可以完好地将SAS数据集(包括任何已知的变量格式)保存为R数据框。

5.导入Stata数据

要将Stata数据导入R中非常简单直接,所需代码如下:

      Library(foreign)
      Mydata  <- read.dta("mydata.dta")

其中,mydata.dta是Stata数据集,mydata是返回的R数据框。

重点提示:进行分析之前,必须首先建立R数据集。应学会用多种方法创建R数据集,并进行浏览和编辑。通过本节的学习,应熟练掌握数据集的建立、保存、导入方法等。在计算机上反复操作本节的实例,可以达到熟练使用R数据集的各种编辑方法的效果。精通R数据集,对于读者学习R可以起到事半功倍的效果。