刷机|附代码|详解R语言的高级数据结构

文章图片

文章图片

文章图片

文章图片

文章图片

文章图片

文章图片

文章图片

文章图片

文章图片

文章图片

文章图片

文章图片

文章图片

文章图片

文章图片

文章图片

文章图片

文章图片

文章图片

有时数据需要比向量更复杂的存储方式 。 幸运的是 , R软件提供了很多的数据结构 。 常见的有数据框(data.frame)、矩阵(matrix)、列表(list)以及数组(array) 。 数据框类似于电子表格 , 矩阵类似于人们熟悉的矩阵数学计算 , 列表对于程序员比较熟悉 。
1、数据框数据框是R语言中最有用的功能之一 , 它也是R语言的易用性经常被提及的原因之一 。 直观上 , 数据框就像Excel电子表格一样有列和行 。 在统计上 , 每列代表一个变量 , 每行代表一个观测 。
在数据框中 , 每列实际是个向量 , 都有相同的长度 。 数据框可以用来保存不同数据类型的数据 。 这也暗示着 , 每列的每个元素必须是相同数据类型的 , 类似向量的要求 。 创建数据框有很多种方式 , 最简单的是用data.frame函数 。 这里用前面介绍过的向量x、y、q创建一个基本的数据框 。
这里创建了一个由3个向量组成的10行3列的数据框 。 注意theDF的名字也是变量 。 实际上 , 可以在创建数据框的过程中设置变量名字 。
数据框是具有很多属性的复杂对象 。 最常检查的属性是行数和列数 , 用nrow和ncol函数分别得到数据框的行数和列数 , 而dim函数可以同时得到数据框的行数和列数 。
数据框的列名字用names函数获取 。 names函数返回一个字符向量 , 列出所有的列名 。 由于是向量 , 可以访问它的每一个元素 。
也可以获取和指定数据框的行名字 。
有时一个数据框有太多的行 , 以至于不能在屏幕上全部显示出来 , 这时 , 可以用head函数显示出前几行 。
像其他变量一样 , 用class函数获取数据框所属的类 。
列表框的每列是独立的向量 , 因此 , 每列都有它自己的类 , 可以单独被访问 。 R语言有多种方法来访问每个列 , 比如操作符和方括号 。 theDF$Sport得到theDF的第三列 , 这说明允许通过列名来指定特定的列 。
与向量相似 , 数据框允许使用方括号通过位置访问单个元素 , 但是要用两个位置指定 , 而不是向量中的一个位置 。 第一个是行数 , 第二个是列数 。 用theDF[32
可以得到theDF的位于第三行第二列的元素 。
可以用向量来索引更多的行或者列 。
通过指定行而不指定任何列可以访问一整行 。 同样 , 可以指定列而不指定任何行来访问一整列 。
将列参数指定为字符向量可以以列名访问多列 。
访问指定列的另外一种方式是把列的名字(索引数)作为方括号里的第二个参数 , 或者作为单方括号或双方括号里的唯一参数 。
这些方法的输出不尽相同 。 有些返回一个向量 , 有些返回一个单列的数据框 。 为了确保输出单列的数据框 , 使用单方括号 , 同时指定第三个参数:drop=FALSE 。 通过列索引数指定某列也同样适用 。
factor的特殊存储形式也可以表示成数据框的形式 , 为此用model.matrix创建一个指示变量(或哑变量)的集合 。 列代表factor的水平值 , 每行里 , 对应水平值的那行为1 , 其他为0 。
2、列表R语言的列表是一个容器 , 可以存储相同类型或者不同类型的数据 。 列表可以存储任意数量、任意类型的对象 。 列表可以全部包含数值型或者字符型数据 , 也可以包含两种数据类型的混合 , 以及数据框或者其他列表 。
列表用list函数创建 , 函数的参数即为列表的元素 。
注意 , 前面创建列表list3的代码块被括号整个括起来 , 使得执行的结果被打印出来 。
像数据框一样 , 列表也可以有名字 。 列表中每个元素都有唯一的名字 , 可以使用names函数查看或设置名字 。
列表元素的名字也可以在创建的过程中用名字-值成对指定 。
令人惊奇的是 , 可以用vector创建指定长度的空列表 。
用双方括号 , 通过设定元素编号或元素名字 , 可以访问列表的单个元素 。 注意这种方式一次只能访问一个元素 。
如果实际使用的元素在一个被访问的元素中 , 可以通过元素的嵌套索引来访问 。
使用索引(数字或名字)可以对列表增加元素 , 前提是该索引事先不存在列表中 。
偶尔对列表或向量或数据框增加元素都还好 , 但是 , 如果反复这样做计算代价就太高了 。 所以最好创建指定长度的列表 , 然后通过合适的索引增加元素 。
3、矩阵对统计非常重要的数学结构是矩阵 。 矩阵跟数据框有点相似 , 是一个矩形结构 , 具有行和列 , 每列的数据类型相同 , 每个元素的数据类型也相同一般都是数值型 。 矩阵跟向量相似 , 也可以进行元素与元素的加法、减法、乘法、除法、等式运算 。 nrow、ncol和dim函数的使用方法与数据框的类似 。
矩阵乘法是常用的数学运算 , 要求左边矩阵的列数等于右边矩阵的行数 。 矩阵A和B都是5×2矩阵 , 所以为了能让矩阵B放在右边进行矩阵乘法运算 , 需要对矩阵B取转置 。
另外一个跟数据框相似的地方是 , 矩阵也有行和列的名字 。
有两个特殊的向量 , letters和LETTERS , 分别由小写字母和大写字母组成 。
对矩阵取转置进行矩阵乘法的时候 , 需要注意乘积结果 。 转置会置换行和列的名字 。 矩阵乘积的行名字取自左边矩阵的行名字 , 矩阵乘积的列名字取自右边矩阵的列名字 。
4、数组本质上 , 数组是一个多维向量 , 它的所有元素必须是相同类型 , 用方括号访问单个元素 。 方括号里第一个参数是行索引 , 第二个参数是列索引 , 剩下的参数是维度 。
数组和矩阵最主要的不同是 , 矩阵只能是二维 , 而数组可以是任意维度 。
数据的数据类型和结构太多的话 , 会对一些分析环境带来问题 , 但是R语言都能从容应对 。 R语言中最基础的数据结构是一维向量 。 功能最强大的数据结构是数据框(在其他语言中都没有) , 可以像电子表格一样处理混合数据类型 。 列表多用于存储数据集合 , 有点像Perl中的散列表 。
本文摘编于《R语言:实用数据分析与可视化技术》
【刷机|附代码|详解R语言的高级数据结构】来源:华章计算机
推荐阅读
- 超级计算机|他们搬动了百万行代码“大山”
- 梦幻西游|梦幻西游:最另类的召唤兽,附加5特殊技能,免费送都无人敢要!
- 又一批股市黑马,极具价值,又有潜力(附相关概念股)值得收藏
- 建筑|印度议会大楼附属建筑物发生火灾 疑因短路引起
- DNF|DNF:最贵附魔宝珠价高无人问津,玩家:一颗,能顶一套半春节套
- 北大西洋公约组织|白俄罗斯总统称北约正在边界附近部署部队 北约否认
- 年产量数年未增,产值却每年增20%!宁海牛企附加值这么做
- 少儿编程Scratch第三讲,反弹回力球,附带程序
- 建筑|印度议会大楼附属建筑起火 疑似电线短路所致
- “光盘行动 珍惜粮食”——徐州市第36中附小一年级组
