一日之计在于晨,这里是更新的佳奥。
(今天虹团的Eutopia、stars we chase、EMOTION可以听了,开心)
前两篇的内容我们初步掌握了R的主要功能和使用方法,从这一篇开始我们要学习R中的数据结构以及如何输入数据、导入数据等,那么我们开始吧!
1 数据集的概念
数据构成的矩形数组称为数据集。举个例子:
对于统计学家,数据集的行和列分被称为观测observation和变量variable。
在这个表格中,PatientID是行/实例标识符,AdmDate是日期型变量,Age是连续性变量,Diabetes是名义型变量,Status是有序型变量。
R可以处理的数据类型(模式)包括数值型、字符型、逻辑性(true/false)、复数型和原生型(字节)。
其中,表格里的PatientID、AdmDate和Age是数值型变量,Diabetes和Status为字符型变量。另外,PatientID是实例标识符,AdmDate含有日期数据,Diabetes和Status分别是名义型和有序变量。
R将实力标识符称为行名rownames,将类别型(名义型、有序型)变量称为因子factors。
2 数据结构
有点绕,但后面的内容也很重要。
R拥有多种存储数据的对象类型,包括标量、向量、矩阵、数组、数据框和列表。
在R中,对象object是指可以赋值给变量的任何事物,包括常量、数据结构、函数和图形。
数据框data frame是R中用于储存数据的一种结构:列表示变量,行表示观测。而数据框将是未来存储数据集的主要数据结构。
这里引用书里对R数据结构的图示:
2.1 向量
先明确什么是标量。标量是只含有一个元素的向量,如 f <- 3、g <- "US"、h <- TRUE。标量用于保存常量。
向量是,用于存储数值型、字符型或逻辑性的一组数据。
如:
注意,同一向量中无法混杂不同模式的数据。
译者注:最好不要在编码时使用c作为对象名。
我们可以通过一定格式来访问特定位置的元素:
2.2 矩阵
向量很简单吧?那么矩阵也是一样的意思。加一个维度,让我们继续。
矩阵就是一个二维数组,每个元素都拥有相同模式。通过函数matrix创建矩阵:
注释写在这里吧,写在里面太挤了。
vector:矩阵里的元素。
nrow、ncol:用以指定行和列的维数。
dimnames:包含了可选的、以字符型向量表示的行名和列名。
选项byrow:表明矩阵应当按行填充(byrow=TRUE)还是按列填充(byrow=FALSE),默认情况下按列填充。
讲多了有点晕,还是从实例中理解吧:
我们还可以使用下标和方括号来选择矩阵中的行、列或元素。x[ i, j ]指的是第i行第j个元素。举例:
大致就是这样。
2.3 数组
不是特别重要,大致理解吧。数组array的维度可以大于2。
创建数组使用函数array,形式如下:
vector:包含了数组中的数据。
dimensions:数值型向量,给出了各个维度下标的最大值。
dimnames:可选的、各维度名称标签的列表。
举个例子吧:
2.4 数据框
稍微休息一下,数据框是R中最长处理的数据结构,也是当前入门最重要的理解部分。
数据框的不同列可以包含不同的模式数据,有一些像SPSS里面的数据集。
数据集可以通过函数data.frame( )创建:
其中,列向量col1、col2、col3可以为任何类型(字符型、数值型、逻辑型等)。每一列的名称都可以由函数names指定。下面是一个演示:
不要着急,还有如何从数据框中选取元素。
普通的例子列举完了,以下是新的记号:
$这个记号是新出现的,它被用来选取一个给定数据框的某一特定变量。
举个例子(今天的例子挺多的),想生成糖尿病类型变量diabetes和病情变量status的列联表,可以使用下列代码:
那么,书上继续说了,每个变量前键入¥有些麻烦,不妨走些捷径,所以接下来接着学习使用函数attach( )、detach( )和单独使用函数with( )来简化代码。(要学的东西增加了)
这里需要用一下之前的mtcars数据框。
我想要绘制每加仑行驶英里数mpg变量的描述性统计量,并分别绘制此变量与发动机排量disp和车身重量wt的散点图:
好吧频繁敲$确实挺累的,那么简化的代码是什么样的呢?
确实,简洁。
函数detach( )将数据框从搜索路径中移除。这个函数不会对原本数据框做任何修改。
函数attach( )和detach( )最好在分析一个单独数据框,而没有太多同名对象中使用,以防止环境中有一个同名对象。
另一个方法,是使用with( )函数,上例可以这样重写:
这种情况下,大括号{ }之间的语句都是针对数据框mtcars执行。如果只有一条语句summary(mpg),那么大括号可以省略。
函数with( )也有局限性,赋值只能在函数的括号内生效,如果需要创建with()结构以外存在的对象,使用特殊赋值符<<- 来代替标准赋值符<-即可。它可以将对象保存到with()以外的全局环境中。
使用这两种函数是习惯问题,多数书本倾向推荐with( )罢了。
那么实例标识符又是什么呢?
病例数据中,病人编号patientID用于区分数据集中的不同个体,在R中实例标识符case identifier可通过数据框操作函数rowname选项指定,例如:
我们就将patientID指定为R中标记各类实例名称所用的变量。
掌握了以上内容,我们就需要对数据的内部关系进行进一步了解与分析。
2.5 因子
因子的重要性不亚于新开一篇,限于篇幅只能在这里展开。
我们先前接触了不少变量,其中变量归结为名义型、有序型和连续变量。
名义型:没有顺序之分的类别变量。糖尿病类型Diabates(Type 1、Type)就是。
有序型变量表示一种顺序关系,而非顺序关系:病情Status(poor, improved, excellent)就是。
连续型变量例如Age,能够表示任意数值。
名义型变量和有序型变量在R中称为因子factor。因子非常重要,它决定了数据的分析方式以及如何进行视觉呈现。
举个例子,假设有向量:
语句diabetes <- factor(diabetes)会将此向量储存为(1,2,1),并在内部关联为1=Type1,2=Type2。针对向量diabetes进行的分析都会将其作为名义型变量对待。
如果要表示有序型变量,需要函数factor( )指定参数ordered=TRUE。给定向量:
语句status <- factor(status, ordered=TRUE)会将此向量编码为(3,2,1),并在内部将这些值关联为:3=Poor, 2=Improved, 1=Excellent。针对此向量的任何分析都将会作为有序型变量对待。
对于字符型向量,因子的水平默认依据字母顺序创建。因此可以通过指定levels选项来覆盖默认顺序:
各水平的赋值将为1=Poor、2=Improved、3=Excellent。
这样就会保证指定的水平与数据中的真实值相匹配。
下列的例子是因子的使用:
2.6 列表
列表list是R的数据类型中最为复杂的一种。
列表:对象(或成分,component)的有序集合。
列表允许整合若干对象到单个对象名下。例如,某个列表中可能是若干向量、矩阵、数据框,甚至其他列表的组合。可以使用函数list( )创建列表。
那么举个例子吧。
本列表有四个成分:一个字符串、一个数值型向量、一个矩阵以及一个字符型向量。
可以通过在双重方括号中指明代表某个成分的数字或名称来访问列表中的元素。此例中,mylist[[2]]和mylist[["ages"]]均指那个含有四个元素的向量。
一些补充:R中的下标不从0开始,而从1开始。
篇幅原因今天先学习到这里,明天我们学一些轻松的,关于数据如何导入R,数据集的标注以及一些实用函数。初步理解了数据以后我们将开始图形初阶绘制学习。
感谢看到这里,那么我们,下篇再见!