第二章 创建数据集

作者: lxmic | 来源:发表于2017-10-03 15:54 被阅读175次

    在本章内容中,数据结构是非常重要的,对于后续的数据分析起着关键的作用,数据结构是可以用来存储数据的。


    数据结构

    2.1 数据集的概念

    数据集通常是由数据构成的一个矩形数组,行表示观测,列表示变量。
    在下表中,病人编号是实例标识符(rownames-行号),入院时间是日期型变量,年龄是连续性变量,糖尿病类型是名义型变量,病情是有序型变量
    R可以处理的数据类型包括数值型、字符型、逻辑型、复数型和原生型。其中前三个变量是数值型变量,后两个是字符型变量。

    在R中,实例标识符成为rownames,将类别型(名义型和有序型)变量成为因子(factors)

    数据集示例

    2.2 数据结构

    R拥有许多存储数据的对象类型,包括标量、向量、矩阵、数组、数据框和列表。 数据结构

    在R中,对象(object)是指可以赋值给变量的任何事物,包括常量、数据结构、函数甚至图形。数据框(data frame):可以存储不同类型的变量,这是最主要的数据结构。因子(factors):是名义型变量或有序型变量。

    2.2.1 向量

    向量是用于存储数值型、字符型或逻辑型数据的一维数组。功能函数c()可以用来创建向量。

    # 数值型向量a,R中在赋值时,<- 的两边一般需要有空格
     a <- c(2, 3, 4, 5, 6)
    # 字符型向量b,且字符型向量中的元素需要用“”
    b <- c("one", "two", "three")
    # 逻辑型向量c,注意逻辑型是大写的,且不用“”
    c <- c(TRUE, FALSE,TRUE) 
    

    标量是只有一个元素的向量,用于保存常量;同一向量中,数据必须是相同类型的,不能混杂。

    通过方括号来访问向量中的元素

    a <- c(1, 2, 5, 3, 6, -2, 4)
    # 表示取第三个元素,是5
    a[3]
    # 表示取1,3,5位置的元素,是1,5,6
    a[c(1, 3, 5)]
    # 表示取第2,3,4,5,6位置的元素
    a[2:6]   
    

    2.2.2 矩阵

    是一个二维数组,每个元素都拥有相同的模式,可通过matrix()创建矩阵。矩阵元素的选择,可以使用下标和方括号来进行。X[i, j],用来选择矩阵X中的第i行和第j列的元素。

    # 创建一个5行4列的矩阵,nrow指定行数,ncol指定列数
    y <- matrix(1:20, nrow=5, ncol=4)
    y
    # cells向量,创建一个2x2的矩阵,rnames指定行名,cnames指定列名,byrow来确定按行创建还是按列创建矩阵,默认是按列填充。
    cells    <- c(1,26,24,68)
    rnames   <- c("R1", "R2")
    cnames   <- c("C1", "C2") 
    mymatrix <- matrix(cells, nrow=2, ncol=2, byrow=TRUE)
    
    

    矩阵和向量类似,只能包含一种数据结构,且都是二维的。

    2.2.3 数组

    数组与矩阵类似,但是维度可以大于2。可以用array()来创建数组。

    dim1 <- c("A1", "A2")
    dim2 <- c("B1", "B2", "B3")
    dim3 <- c("C1", "C2", "C3", "C4")
    # 1:24是矩阵数据,向量c(2,3,4)代表数组的维数向量--2行3列4个矩阵的组合,dimnames各维名称构成的向量或列表,缺省值维空
    z <- array(1:24, c(2,3,4), dimnames=list(dim1, dim2, dim3))
    

    2.2.4 数据框

    数据框由于不同的列可以包含不同模式的数据,比矩阵更具有一般性。它将是在R中最常处理的数据结构。数据框可以通过data.frame()函数来创建。
    patientdata <- data.frame(patientID, age, diabetes, status)

    • 数据框元素的选取:
      可以用下标记号,或直接指定列名。patientdata[1:2] 选取其中的第一和第二列的数据;或者patientdata[c("diabetes", "status")]选取这两列的数据。也可以使用$符号来表示某个变量,patientdata$age被用来选取变量age的元素。

    为了方便使用变量,而不用每次都键入一次patientdata$,可以联合使用attach()和detach()。但是要注意的是:如果环境中在你attach数据框之前已经有一个相同的变量了,那么就会出现错误。
    此外,with(data.frame, {code}),这个函数就不会出现上述的错误,因为花括号中的代码只是针对次数据框。然而,with()函数的局限在于,此函数内的赋值在全局环境中没法使用,只是在此函数中有作用。解决办法就是用特殊赋值符号<<- 代替标准赋值符号<-就可以全局使用。

    2.2.5 因子

    变量可以分为三类:名义型、有序型和连续性变量。

    • 名义型变量:是没有顺序之分的类别变量,糖尿病类型(type1,type2)就是名义型变量。
    • 有序型变量:表示一种顺序关系,而非数量关系,病情(poor,improved,excellent)就是一个很好的例子。
    • 连续型变量:可以呈现为某个范围内的任一值,并同时表示顺序和数量。年龄就是这样的例子。

    因子:是名义型变量和有序型变量的统称,在R中,非常重要。它决定了数据的分析方式以及如何进行视觉呈现。
    函数factor()以一个整数向量的形式存储类别值,同时一个由字符串(原始值)组成的内部向量映射到这些整数上。

    原始的向量diabetes <- c("type1", type2", type1", type1"),通过diabetes <- factor(diabetes)将名义型向量存储为整数向量(1, 2, 1, 1),并在内部将其关联为1=type1和2=type2,并且会将关于此向量的任何分析都会作为名义型变量对待。
    有序型向量,需要再指定参数ordered=TRUE:status <- c("poor", "improved", "excellent", "poor")通过语句status <- factor(status, ordered=TRUE)会将向量编码为(3,2,1,3),并同样在内部建立关联1=excellent、2=improved和3=poor。字符型向量的因子水平是默认通过字母顺序建立,因此一般我们都通过levels参数来指定需要的顺序。

    • 因子的使用
    patientID <- c(1, 2, 3, 4)
    age <- c(25, 34, 28, 52)
    diabetes <- c("Type1", "Type2", "Type1", "Type1")
    status <- c("Poor", "Improved", "Excellent", "Poor")
    diabetes <- factor(diabetes)
    status <- factor(status, order=TRUE)
    patientdata <- data.frame(patientID, age, diabetes, status)
    # str()函数可以查看数据集的结构,包括多少个变量和多少个观测值
    str(patientdata)   
    # 显示描述性的统计信息                            
    summary(patientdata)
    

    str()和summary()结果的说明:
    str()提供R中某个对象的信息,图中显示这个对象是data.frame:4个变量,每个变量有4个观测值。还列出了各个变量的类型,有数值型变量,因子(名义型变量)和有序因子(有序型变量)以及水平。
    summary()提供数据的统计信息,会区别对待各个变量。显示了连续型变量的最大值、最小值、均值和各四分位数,并显示类别型变量的频数值。

    str()和summary()结果

    2.2.6 列表

    列表(list)是R的数据类型中最为复杂的一种。list()用来创建列表,列表中可以是目前为止的所有结构。下面的列表有4个对象:一个字符串,一个数值型向量,一个矩阵以及一个字符型向量。
    列表元素的访问:可以通过双重方括号[[2]]中指明代表某个对象的数字或名称来访问。也可以用$来取得某个对象。

    g <- "My First List"
    h <- c(25, 26, 18, 39)
    j <- matrix(1:10, nrow=5)
    k <- c("one", "two", "three")
    mylist <- list(title=g, ages=h, j, k)
    mylist
    

    2.3 数据的输入

    R的数据源

    2.3.1 使用键盘输入数据

    最常见的方式有两种:用R内置的文本编辑器和直接在代码中嵌入数据,一般首先考虑文本编辑器。edit()函数会自动调用一个手动输入数据的文本编辑器。

    1. 创建空数据框:mydata <- data.frame(age=numeric(0), gender=character(0), weight=numeric(0))
    2. 调用编辑器:mydata <- edit(mydata)或者fix(mydata),键入你的数据,关闭编辑器,自动保存。
    • 直接在代码中嵌入
    mydatatxt <- "
    age gender weight
    25 m 166
    30 f 115
    18 f 120
    "
    mydata <- read.table(header=TRUE, text=mydatatxt)
    

    然而,这种方式只适合小数据的处理。

    2.3.2 从带分隔符的文本文件导入数据

    可以使用read.table()从带分隔符的文本文件中导入数据,并可读入一个表格格式的文件,将其保存为一个数据框。语法:
    mydata <- read.table(file, options)
    file是一个带分隔符的ASCII文本文件,options是控制如何处理数据的选项。如下:

    header:文件的第一行是否包含了变量名的逻辑型变量。
    seq:用来指定读取某种分隔符的文件,如seq=“,”来读取用逗号来分割的行内数据的文件。
    row.names:用于一个或多个的行标识符。
    col.names:如果不包括列变量名,可以用此选项来指定。
    colClasses:用来指定每一列的数据类型。
    stringAsFactors:一个逻辑变量,是够要将字符转化成为因子,默认是转化为因子。

    2.3.2 导入Excel数据

    读取一个Excel文件的最好方式,就是在Excel中将其导出为一个逗号分隔文件csv,并使用read.table()将其导入到R中。也可以安装xlsx包,直接导入Excel工作表。
    其他还有很多导入数据的方式,如从网页抓取数据、SPSS导入数据、导入数据和数据库系统导入数据等等。

    相关文章

      网友评论

        本文标题:第二章 创建数据集

        本文链接:https://www.haomeiwen.com/subject/ukxtyxtx.html