四、数据框(数据表)
R语言中做统计分析的样本数据,都是按数据框类型操作的。
数据框的每一列代表一个变量属性的所有取值,每一行代表一条样本数据。
1. 创建数据框
通过函数data.frame()把多个向量组合起来创建,并设置列名称。其基本格式为:
data.frame(col1,col2,col3,...)
其中,列向量col1, col2, col3, …可以为任意类型。
注:矩阵也可以通过函数data.frame()转化为数据库。
2. 数据框索引
列标或列名称索引:
data_iris[,1]——返回数据框data_iris的第1列
data_iris$Sepal.Length或data_iris["Sepal.Length"]
——同 data_iris[,1]
行索引:
data_iris[1,]——返回数据框data_iris的第1行
data_iris[1:3,]——返回数据框data_iris的第1至3行
元素索引:
data_iris[1,1]——返回数据框data_iris的第1列第1个数据
data_iris$Sepal.Length[1] 或data_iris["Sepal.Length"][1]——返回数据框data_iris的Sepal.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个参数是终止位置;letters和LETTERS是R中专有变量,表示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()