R语言系列8 | 变量类型7-矩阵的创建修改和索引

矩阵是可以看作一种特殊的向量的,它比向量多了两个附加属性,行数和列数,因此让它的复杂程度获得了提高。

向量作为R中的一种非常基础的数据类型,大家通过过去的学习一定已经彻底的掌握了。但是,这个世界上的数据是复杂多变的,我们只使用向量是无法表示更加复杂的数据情况。

我们在线性代数课上学过一种数学概念,矩阵。这个概念在为了统计学家开发的R语言中同样适用,并且只需要在基础环境中,我们可以具有很多对矩阵的操作方法。

(由于R其实处理数据框较多,矩阵并不会讲很多的东西,如果非要使用矩阵,我其实还是更推荐去隔壁Python学习np和scipy)

创建矩阵

任何数据类型学习的开始都是如何得到它,也就是如何创建它。矩阵也不例外,我们首要的创建方式就是直接使用matrix函数进行创建。而且其实说是创建矩阵,我们其实是在把一个向量转化为矩阵,

# 创建矩阵
m1 <- matrix(1:9,
             nrow = 3,
             ncol = 3)
 m1
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9

上面就是最基本的创建矩阵的方法了。我们需要给matrix一个向量(其实矩阵也可以,不过就会让你产生一些奇奇怪怪的误导,后面讲解了矩阵转向量的时候你就明白了),这个向量的内容就会成为创建的矩阵的内容。

然后跟着需要指定你想创建的行数或者列数,这两个只需要指定其一即可,R会给我们计算另一个数字是几的,这样,我们就创建好了一个矩阵。

但是我们可以发现一个问题,我们创建的矩阵是竖着一排排放的,这个叫做,****列优先原则,我们也可以通过指定参数byrow,来让矩阵变成行优先

> m11 <- matrix(1:9,
+               nrow = 3,
+               byrow = T)
> m11
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
[3,]    7    8    9
>

这就是行优先矩阵了,存储的内容都是一样的,就是行列优先顺序不同。

到这里你可能就会问了,R是不是只能创建方阵呢,普通的矩阵能不能创建呢?那当然可以了


> m2 <- matrix(1:10,nrow = 5)
> m2
     [,1] [,2]
[1,]    1    6
[2,]    2    7
[3,]    3    8
[4,]    4    9
[5,]    5   10

我本人是习惯列优先进行存储的,所以我一般不指定byrow参数。

矩阵的索引

任何一种数据类型,我们对它最优先的操作学习,都是索引操作。任何一种结构的数据,我们存储它的目的都是为了使用,所以学习如果取到它的值,是非常重要的事情。

对矩阵的基本索引方式和向量非常相似,如果不了解向量的直接索引,布尔索引和连续索引,请看

向量的索引方式

onlybugs,公众号:轻松玩转生信R语言系列2 | 变量类型1-向量1

由于有了上面的基础,所以我们先索引点简单的,然后做两个不一样的案例。矩阵和向量最大的区别再与矩阵具有两个维度,索引的时候需要两个位置

# 最简单的索引方法 取位置 1 1
> m1[1,1]
[1] 1
# 取第一行和第二行的第三列的值
> m1[c(1,2),3]
[1] 7 8
# 取第一行的所有列
> m1[1,]
[1] 1 4 7

这里停一下,我们取第一行的所有列就已经是不同了,要注意,当我们想取某一行的所有列,或者某列的所有行,或者当你想取所有的时候,把位置空出来,R就会自动给你取到所有。

说完了上面的,下面就都非常简单了

#  取一二行的所有列
> m1[c(1,2),]
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
# 取第一行和第三行的所有列
> m1[c(T,F,T),]
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    3    6    9
# 取前两行和后两列位置的值
> m1[c(T,T,F),c(2,3)]
     [,1] [,2]
[1,]    4    7
[2,]    5    8

大家尤其要注意最后一种,取前两行和后两列的操作,很多时候这是非常有用的步骤,会减少你使用循环,提高程序的运行速度。

改变矩阵的行和列

讲解完了索引,我们来讲一下如何矩阵的内容以及删除矩阵的行列。

其实修改特定位置的值非常简单,我们都已经找到了,修改就是一瞬间的事情,


> m1[1,1] = 11
> m1
     [,1] [,2] [,3]
[1,]   11    4    7
[2,]    2    5    8
[3,]    3    6    9

除了单个值的修改,我们还可以对索引到的行和列进行修改,一般来说,我们会直接把要修改的结果放进向量中,然后进行修改,但是如果修改的值不够长,也是可以操作的,如下


> m1[1,] = 1
> m1
     [,1] [,2] [,3]
[1,]    1    1    1
[2,]    2    5    8
[3,]    3    6    9

如果你对上面的内容表示有些困惑,那么你应该回忆一下,

循环补齐机制

onlybugs,公众号:轻松玩转生信R语言系列3 | 变量类型2-向量2

这里有着你需要了解的一切。

最后讲解如何删除矩阵的行列,这里的操作也和向量是一样的,具体请回顾

向量的增删改

onlybugs,公众号:轻松玩转生信R语言系列2 | 变量类型1-向量1


> m1[-1,]
     [,1] [,2] [,3]
[1,]    2    5    8
[2,]    3    6    9
> m1[,-3]
     [,1] [,2]
[1,]    1    1
[2,]    2    5
[3,]    3    6

本文的全部内容就到此结束了,这篇文章讲解了最最基本的矩阵创建方法,以及对矩阵进行索引的操作,加上修改矩阵元素和删除矩阵的列等等,这些都是使用矩阵的基础知识,需要彻底掌握,才能在矩阵的使用中得心应手。

下一篇文章将会介绍矩阵维度,矩阵转化为向量以及矩阵的各种运算,矩阵的转置等内容。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,080评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,422评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,630评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,554评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,662评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,856评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,014评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,752评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,212评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,541评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,687评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,347评论 4 331
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,973评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,777评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,006评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,406评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,576评论 2 349

推荐阅读更多精彩内容

  • “ 如果说编程是盖一栋大楼,那么说,变量就是这栋大楼的各种建筑材料。想盖好大楼,我们就应该理解每种材料的特性以及使...
    onlybugs阅读 669评论 0 1
  • “ 终于迎来了向量的终章,到这篇文章末为止,大部分代码里的向量操作都难不倒你了,和数据生成以及索引等的操作也都再不...
    onlybugs阅读 541评论 0 0
  • “ 上节课我们讲解了向量的基本运算和R语言中非常重要的概念,循环补齐机制,但是我们还不能很方便的创建特定样式的向量...
    onlybugs阅读 513评论 0 0
  • “ 对于向量来说,除了对它进行创建和增删改查操作,我们还有很多魔法一样的操作来处理向量。” 首先给出上一篇文章末尾...
    onlybugs阅读 440评论 0 1
  • “ 在拿到一组数据的时候,我们经常会对特定的值进行筛选,或者想看看数据中是不是有NA值以及排查数据是不是都大于或者...
    onlybugs阅读 506评论 0 0