1.4.2 数据结构
常见的数据结构包括:向量(vector)、数据框(data.frame)、矩阵(matrix)、列表(list)和数组(array)。其中,矩阵是将数据用行和列排列的长方形表格,它是二维的数组,其单元必须是相同的数据类型,通常用列来表示不同的变量,用行表示各个对象;数组可以看作是带有多个下标的类型相同的元素的集合;列表是一个对象的有序集合构成的对象,列表中包含的对象又称为它的分量(component),分量可以是不同的模式或(和)类型。我们在本书的数据可视化中,比较常用的是向量(因子属于特殊的向量)和数据框,所以我们重点介绍这两种类型的数据结构,还将介绍与数据可视化密切相关的函数。
1.向量
向量是用于存储数值型、字符型或逻辑型数据的一维数组。执行组合功能的函数c()可用来创建向量(c代表合并:combine)。值得注意的是,单个向量中的数据类型是固定的,比如数值型向量中的元素就必须全为向量。量是R语言中最基本的数据结构,其他类型的数据结构都可以由向量构成。最常见的向量有三种类型:数值型、字符型、逻辑型。
(1)向量的创建
向量的创建有多种方法,我们既可以手动输入,使用函数c()创建向量;也可以使用现有的函数创建向量,比如seq()、rep()等函数,具体如表1-4-1所示。
表1-4-1 向量的创建
(2)向量的处理
封面
结果order包括两部分:$x为[5 4 3 2 1], $ix为[4 2 3 5 1]。
Vec<-c(1,4,3,5,2) order<-sort(Vec, index.return=TRUE, decreasing = TRUE)
●向量的唯一值。unique()函数主要是返回一个删除了把重复元素或行的向量、数据框或数组。在需要对数据框根据某列进行分组运算时,需要使用该函数先获取类别总数。
Vec<-c("peter", "jack", "peter", "jack", "eelin") Uni<-unique(Vec) #输出:"peter","jack","eelin"
●连续向量的离散化。在做数据挖掘模型时,我们有时会需要把连续型变量转换为离散型变量,这种转换的过程就是数据离散化,分箱就是离散化常用的一种方法。数据离散化最简单的方法就是使用cut()函数自定义离散区间,从而对数据进行离散处理。
Num_Vector<- c(10, 5, 4, 7, 6, 1, 4, 8, 8, 5) Cut_Vector<-cut(Num_Vector, breaks=c(0,3,6,9,11), labels=c("0~3", "3~6", "6~9", ">9"), right = TRUE) # 输出结果为因子向量:>9, 3~6, 3~6, 6~9, 3~6, 0~3, 3~6, 6~9, 6~9, 3~6;其水平Levels为: 0~3, 3~6, 6~9,>9
(3)向量的索引
向量是多个元素的集合,当我们只需要指定或者说提取该向量中的某个元素时,就可以使用向量的索引(indexing)。向量元素有三种基本类型的向量索引:整数型,索引的是元素位置;字符型,索引的是名称属性;逻辑型,索引的是相同长度的逻辑向量对应的逻辑值为真的元素。
x<-c(1,4,3,5,2)
●整数型索引,选择某个或多个元素:x[2]; x[-2]; x[2:4]; x[c(1,4)]
●逻辑型索引,逻辑运算选择元素:x[x>2]; x[x==1]; x[x<=5]
2.因子
因子(factor)是R语言中许多强大运算的基础,包括许多针对表格数据的运算,可分为类别型变量和有序型变量。因子可以看成是包含了额外信息的向量,这额外的信息就是不同的类别,称之为水平(level)。因子在R中非常重要,因为它决定了数据的分析方式,以及如何进行视觉呈现。
(1)因子的创建
一个因子不仅包括分类变量本身,还包括变量不同的可能水平(即使它们在数据中不出现)。因子函数factor()用下面的选项创建一个因子。对于字符型向量,因子的水平默认依字母顺序创建:
(Fair, Good, Ideal, Premium, Very Good) Cut<-c("Fair", "Good", "Very Good", "Premium", "Ideal") Cut_Facor1<-as.factor(Cut)
(2)水平的更改
很多时候,按默认的字母顺序排序的因子很少能够让人满意。因此,可以指定levels选项来覆盖默认排序。更改因子向量的levels为("Good", "Fair", "Very Good", "Ideal", "Premium"),就需要使用factor()函数更改levels。
Cut_Facor2<-factor(x=c("Fair", "Good", "Very Good", "Premium", "Ideal"), levels= c("Good", "Fair", "Very Good", "Ideal", "Premium"), ordered=TRUE)
(3)类型的转换
数值型因子向量的类型变换。有时候我们需要将数值型的因子向量重新转换成数值型向量,这时,我们需要使用as.numeric(as.character())组合函数,而不能直接使用as.numeric()函数。其中as.character()函数表示将向量变成字符型,as.numeric()函数表示将向量变成数值型。
Num _Facor<-factor(x=c(1,3,5,2), levels= c(5,3,2,1), ordered=TRUE) Num_Vector1<-as.numeric(as.character(Num_Facor)) # 输出:1 3 5 2 Num_Vector2<-as.numeric(Num_Facor) # 输出:4 2 1 3
3.数据框
数据框是R语言中的一个种表格结构,对应于数据库中的表,类似Excel中的数据表。数据框是由多个向量构成的,每个向量的长度相同。数据框类似矩阵,也是一个二维表结构。在统计学术语中,用行来表示观测(observation),用列来表示变量(variable)。
(1)数据框的创建与查看
创建数据框,最简单的方法就是,用同名的定义函数data.frame(),输入每个变量的名称及对应的向量,每个向量的长度相同。一个数据框可能包含多个变量(向量),有时需要单独提取某个变量,使用特殊的$符号来访问,由“数据框$变量名”构成。数据框数据的选取如表1-4-2所示。
表1-4-2 数据框数据的选取
●获取数据框的行数、列数和维数:nrow()、ncol()、dim()。●获取数据框的列名或行名:names()、rownames()、colnames();重新定义列名:names(df)<-c("X","Y", "Z")。
●观察数据框的内容:view(df)、head(df, n=3)、tail(df)。
(2)空数据框的创建
创建空数据框,在需要自己构造绘图的数据框数据信息时尤为重要。有时候,绘制复杂的数据图表的过程中,我们需要对现有的数据进行插值、拟合等处理时,需要使用空的数据框储存新的数据,最后使用新的数据框绘制图表。创建空的数据框主要有如下两种方法。
●创建一个名为Df_Empty,包括两个变量(var_a为numeric类型;var_b为character类型)的data.frame。但是注意:要加上stringsAsFactors=FALSE,否则在后面逐行输入数据时,会因为var_b的取值未经定义的factor level而报错。
Df_Empty1<- data.frame(var_a = numeric(), var_b = character(), stringsAsFactors=FALSE)
●先使用矩阵创建空的数据框,同时通过dimnames设定数据框的列名。这个相比于前一种方法可以更快速地创建多列空数据框:
Df_Empty2 <- data.frame(matrix(ncol=2, nrow=0, dimnames=list(c(), c("var_a", "var_b"))))