购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.1 R语言的数据结构

扫一扫,看视频

在R语言中,常用的数据结构(称之为对象)主要有向量、矩阵、数组、数据框、列表等。其中,向量是最基本的数据结构;矩阵、数组、数据框和列表都可以由向量构成。

2.1.1 向量和矩阵

1. 向量

向量是R语言中最基本的数据对象,把只有一个元素的标量认为是长度为1的向量。在R语言中,向量有多种类型。例如,向量的每个元素可以是字符串、逻辑值、因子等。

向量的生成方法有很多,使用时灵活多变。下面介绍7种生成向量的方法。

(1)通过“:”生成向量。

上面的程序通过1:6生成了长度为6的向量A,使用“:”生成向量时,步长默认为1,输出结果中的[1]表示向量的第一个位置。

(2)通过c()函数生成向量。

如果需要的向量不是每次增加1,而是增加非规律的数值时,则可以使用c()函数将它们连接起来。

(3)通过seq()函数生成等间隔数据的向量。

上面的程序使用seq()函数生成两种形式的等间隔数据的向量。其中,第一种从0开始,步长为2,依次增加到10结束,得到向量B;第二种在0和10之间(包括0和10)生成等间隔的长度为5的向量,得到向量B。

(4)通过rep()函数生成具有重复元素的向量。

上面使用rep()函数将序列1:2中的两个元素分别重复2次和5次,生成向量C。

(5)生成字符串向量。

在R语言中,由英文模式下的双引号" "(或单引号' ')包裹的内容为字符串。上面的程序是通过c()函数生成一个字符串向量v_char,通过class()函数获取该向量的数据类型,结果为"character",表明它是字符串向量。

(6)生成逻辑值向量。

在R语言中,逻辑值“真”使用TRUE(T)表示;逻辑值“假”使用FALSE(F)表示。

(7)生成因子向量。

上面的程序通过factor()函数生成一个因子向量,输出结果表明向量的水平(levels,包含的所有不相同的类别)为A、B、C。

对向量元素进行操作的方法有很多,下面介绍3种从向量中获取元素的方式。

(1)通过在中括号“[]”中指定元素的位置来获取元素。

上面的程序是要获取vec向量中第1、3、5、7、9几个位置的元素,由于vec向量只有7个元素,所以超出索引的第9个位置的元素的输出为NA,表示该位置为缺失值。

(2)在中括号中使用负号“-”代表删除元素。

上面的程序使用负号删除了向量的前5个元素。

(3)通过与向量等长的逻辑值向量获取需要的元素。

上面的程序先通过vec %% 3 == 0获取与向量等长的逻辑值向量,即向量是否能够被3整除,然后将逻辑值和中括号“[]”结合起来获取向量中能够被3整除的元素。

2. 矩阵

矩阵可以看作是向量的扩充,其类型包括数值型、字符串型、逻辑型等。

(1)使用matrix()函数生成矩阵。

上面的程序通过matrix()函数将向量转换为矩阵,其中nrow、ncol表示矩阵的行数、列数,默认情况下,矩阵的生成是按照列优先排列,如果想要按照行优先排列,则需要使用参数byrow = TRUE。

(2)定义矩阵的列名和行名。

上面的程序使用colnames()和rownames()函数可以获取矩阵的列名和行名,或者给矩阵的列和行定义新的名称。

(3)矩阵元素的获取。

与获取向量元素类似,通过中括号“[]”中的行、列索引即可获取矩阵中对应的元素。如果矩阵拥有列名,可以指定列名获取所需要的列。

2.1.2 高维数组

超过二维的数组称为高维数组,可以使用array()函数生成。

上面的程序生成一个2行4列2层的数组,其中每层都是一个2×4的矩阵。

高维数组中元素的获取与矩阵、向量类似,都可以通过中括号“[]”和相应位置的索引来获取元素。例如,获取arr中第2层第2行的元素的程序如下:

与向量和矩阵类似,也可以通过高维数组的位置索引来获取满足条件的元素。

在上面的程序中,语句which(arr %% 5 == 0)表示获取arr中能够被5整除的数值在数组中所在的位置。

对高维数组可以通过apply()函数进行相关计算。

2.1.3 数据框和列表

数据框(表)是R语言中使用最多的数据对象,很多实际数据都是以数据框的格式存储的;列表则是最灵活的数据结构。

1. 数据框

数据框和矩阵相似,都是为了更好地管理更多的变量,所不同的是,矩阵中所有元素只有一种数据类型,而数据框的每一列都可以是一种数据类型,如字符串向量、数值向量、因子向量等。

使用数据框非常便于进行数据分析及对列进行操作,其中每列作为一个特征(变量),每行作为一个样本。在R语言中,可以使用data.frame()函数构建数据框,使用head()或summary()函数查看数据框的内容。

上面的程序使用data.frame()函数构建含有4个变量(id、age、sex、score)的数据框,其中的参数stringsAsFactors = FALSE,表示不把字符串向量转换为因子向量。使用head()函数可以查看数据框前几行的内容。

还可以使用summary()函数查看数据框中数据的类型和内容,对字符串变量将输出变量的长度和类型;对数值变量将输出变量的最小值、均值、最大值等内容。

可以使用as.data.frame()函数将矩阵转换为数据框。

数据框中内容的获取可以通过中括号“[]”、索引、$符号选择特定的变量等方式,也可以通过变量名称获取指定的内容。

2. 列表

列表可以包含R语言的所有对象,如向量、字符串、矩阵、高维数组、数据框,甚至列表中还可以包含列表。列表通常由list()函数生成。

上面的程序生成的列表中包含因子向量A、矩阵B、字符串C和数据框D这4种数据类型。

使用str()函数可以获取列表的汇总信息。

可以通过[]或[[]]获取列表中的元素,结合$符号可以获取列表中数据框的内容。

如果列表中的元素有名字,可以通过列表中每个元素的名字来获取相应的内容。

上面的程序首先通过names()函数给列表中的元素命名,然后使用$符号获取对应名称下的内容。 8GE6aHfA/2T9pyspLjdFubhPLj6tsoNludZW5guNlkdXTP128ffM/j40u7VjnGuA

点击中间区域
呼出菜单
上一章
目录
下一章
×