
1.3.5 数据集
数据集与1.3.2节矩阵一样都是具有行及列的二维结构,但是数据集允许各纵向字段有不同的数据类型,它类似其他统计软件SAS、SPSS与Stata中的数据集(data set或dataset),以及Python语言pandas包的DataFrame对象(参见1.4.2节Python语言衍生数据对象取值),也是我们在R中最常遇到的数据对象。套件{UsingR}中有一个数据集对象crime,它是美国50州的暴力犯罪率数据。

因为都是二维结构,所以数据集外表上与矩阵看来非常相似。但是数据集本质上是以列表方式存储的,也就是说,数据集是各列向量(即各变量)均等长的列表结构,因此可用矩阵的方式来呈现。

names()函数将crime视为一维列表返回其元素名称,因此,数据分析师经常以此取得数据集的变量名称。dimnames()则返回crime矩阵下的行名与列名,反而比较少用。

前述数据集各字段都是数值类型,因此也可以存为matrix,两者显示的结果完全相同,因此建议读者要认真查看数据对象的类型,以避免使用R函数时传入不正确的类型,产生不必要的错误,Python语言亦是如此。

再举一个各纵向字段有不同数据类型的R数据集,套件{MASS}中有一数据集Cars,它记录了93种汽车于1993年在美国的销售量,从str()函数返回的结果,我们可以看出其域类型有因子、整数及数值型等。



此时将Cars93转为matrix类型时,会把值类型的字段变成字符串类型(有双引号),我们要注意前述数据类型在后台自动(强制)转换的现象。

· 数据集创建函数是data.frame(),语法如下:
mydata<-data.frame(域名1=向量1,域名2=向量2,…)

从上例中可以看出,数据集字段若未给定名称,R语言会根据传入的向量名称自动产生各域名。此外,建立数据集时,默认会将字符串变量转为因子变量(或称因子向量)(参见1.3.6节因子),用户如果需要保留字符串类型,可以通过参数stringsAsFactors=F改变默认的设定。
