R语言教程 -- 数据结构(数据框,因子,列表)

四、数据框(数据表)

R语言中做统计分析的样本数据,都是按数据框类型操作的。

数据框的每一列代表一个变量属性的所有取值,每一行代表一条样本数据。

    1. 创建数据框

通过函数data.frame()把多个向量组合起来创建,并设置列名称。其基本格式为:

data.frame(col1,col2,col3,...)

其中,列向量col1, col2, col3, 可以为任意类型。

注:矩阵也可以通过函数data.frame()转化为数据库。

2. 数据框索引

列标或列名称索引

data_iris[,1]——返回数据框data_iris的第1

data_iris$Sepal.Lengthdata_iris["Sepal.Length"]

—— data_iris[,1]

行索引

data_iris[1,]——返回数据框data_iris的第1

data_iris[1:3,]——返回数据框data_iris的第13

元素索引

data_iris[1,1]——返回数据框data_iris的第1列第1个数据

  data_iris$Sepal.Length[1] data_iris["Sepal.Length"][1]——返回数据框data_irisSepal.Length列第1个数据

用函数subset()按条件索引

注:还可用sqldf包中的sqldf()函数,借助sql语句索引。例如,

library(sqldf)

sqldf("select * from mtcars where carb=1 order by mpg", row.names=TRUE)

3. 数据框的编辑

类似矩阵操作,可通过函数rbind(),增加行(样本数据),要求宽度(列数)相同;函数cbind(),增加列(属性变量),要求高度(行数)相同。

删除样本(行),类似矩阵操作。

用函数names()查看或修改数据框的列名。

五、因子(factor

    变量分为名义型(无顺序好坏之分的分类变量,如性别)、有序型(有顺序好坏之分的分类变量,如疗效)、连续型(通常的数值变量,可带小数位)。

名义型和有序型的类别变量,在R中称为因子。

因子提供了一个简单且紧凑的形式来处理分类数据,因子用水平来表示所有可能的取值,例如,性别有两个水平:男、女。

    1. 创建因子

1)用函数factor(),基本格式为:

factor(x, levels, labels=..., exclude=...,

ordered=..., nmax=...)

其中,x为创建因子的数据向量;levels指定因子的水平数,默认为x中不重复的所有值;labels设置各水平名称(前缀),与水平一一对应;exclude指定有哪些水平是不需要的;ordered设置是否对因子水平排序,默认为TRUE即有序因子,FALSE为无序因子;nmax设定水平数的上限。

 

 

:函数substring()用来提取字符串的子串,第2个参数是起始位置,第3个参数是终止位置;lettersLETTERSR中专有变量,表示26个小写/大写字母组成的字符向量。

 

    2)用函数gl()创建因子序列

用函数gl()生成不同水平的因子序列,基本格式为:

gl(n, k, length=n*k, labels=seq_len(n), ordered=FALSE)

其中,n表示因子水平数;k表示每个水平的重复数;length表示生成序列的长度;labels为表示因子水平的n维向量;ordered指定是否为有序因子,TRUE为有序因子,FALSE为无序因子。

 

2. 因子的存储方式

    R语言中,因子是以整数型向量存储的,每个因子水平对应一个整数型的数。对字符型向量创建的因子,会按照字母顺序排序,再对应到整数型向量。

 

六、列表

列表就是一些对象或成分的有序集合(组合方式更自由)。

列表允许整合若干对象到单个对象名下,例如,某个列表可能是若干向量、矩阵、数据框,甚至是其它列表的组合。

一般在使用R语言进行数据分析和挖掘的过程中,向量和数据框是用的最多的,列表常在存储较复杂的数据时作为数据对象类型。

列表提供了一种简单的方式来组织和重新调用不相干的信息。另外,许多R函数的运行结果都是用列表形式返回的。

    1. 创建列表

用函数list(),基本格式为:

list(object1,object2,...)

其中,object对象可以是任何类型。

    若同时为列表中的对象命名:

list(name1=object1,name2=object2,...)

 

 

2. 列表索引

与数据框操作类似,但是用双重方括号。

    data[[1]]——索引列表data的第1

    data[["a"]]——按名称索引,同data[[1]]

    data$a——索引列表data的名称为a的列

    data[[1]][1]——索引列表data的第1列的第1个元素

 

3. 列表的编辑

与向量的编辑类似,使用函数c()进行合并。

注意:不同于其他数据结构,将列表转化为向量需要用到函数unlist()