R语言 您所在的位置:网站首页 r语言将两个矩阵合并 R语言

R语言

2023-12-18 10:45| 来源: 网络整理| 查看: 265

文章目录 矩阵创建矩阵matrix()函数dim()函数 矩阵的函数矩阵的索引矩阵的行和列的命名问题矩阵运算矩阵相乘矩阵与标量相乘矩阵与向量相加 矩阵元素筛选which函数在矩阵中的应用R语言中的%in%运算符 对矩阵的行和列调用函数apply()函数 避免意外降维

矩阵

矩阵是一个二维数组,只是每个元素都拥有相同的模式(数值型、字符型或逻辑型))。矩阵(matrix)是一种特殊的向量,包含两个附加的属性:行数和列数。反之,向量却不能看作是只有一列或一行的矩阵。

创建矩阵 matrix()函数

格式:

matrix(vector, nrow=1,ncol=1,byrow=FALSE, dimnames=…)

byrow取值为逻辑变量,表示是否将data中的数据按行放至,默认值为FALSE

byrow=T改变的只是数据输入的顺序,矩阵本身依然是按列存储

> x x [,1] [,2] [,3] [,4] [1,] 1 2 3 4 [2,] 5 6 7 8 [3,] 9 10 11 12 > as.vector(x) [1] 1 5 9 2 6 10 3 7 11 4 8 12

举例:

> a a [,1] [,2] [1,] 1 3 [2,] 2 4

举例:

> a a [,1] [,2] [,3] [,4] [,5] [1,] 1 4 7 10 13 [2,] 2 5 8 11 14 [3,] 3 6 9 12 15 > a a [,1] [,2] [,3] [,4] [,5] [1,] 1 4 7 10 13 [2,] 2 5 8 11 14 [3,] 3 6 9 12 15

举例:

> b b[1,1]=1 > b[2,1]=2 > b [,1] [,2] [,3] [1,] 1 NA NA [2,] 2 NA NA

总结:

可以只指定行或者列

可以生成一个初始空矩阵,然后再进行赋值

NA表示该数据集中的该数据遗失,不存在。在针对具有NA的数据集进行函数操作的时候,该NA不会被直接剔除。

> mean(b[1,]) [1] NA > mean(b[,1]) [1] 1.5 dim()函数

可用dim()函数将向量转换成矩阵

格式:

dim(x) x dim(x) x [,1] [,2] [,3] [,4] [1,] 1 4 7 10 [2,] 2 5 8 11 [3,] 3 6 9 12 矩阵的函数 函数说明dim()获取对象(矩阵,数组)的维数,不能获得向量的维数nrow()获取矩阵行数crow()获取矩阵列数as.vector()将矩阵和数组强行转换为向量rbind()将向量或者矩阵合并为一个矩阵,按照行合并,即每个子矩阵需要有相同的列数cbind()将向量或者矩阵合并为一个矩阵,按照列合并,即每个子矩阵需要有相同的行数head()tail() 矩阵的索引

矩阵下标可以取正整数、负整数,分别表示矩阵下标对应的内容或者去掉矩阵中相应的行和列

#创建一个3*5的矩阵 > A A [,1] [,2] [,3] [,4] [,5] [1,] 1 4 7 10 13 [2,] 2 5 8 11 14 [3,] 3 6 9 12 15 #取位于第一行第二列的数 > A[1,2] [1] 4 > A[1,2] A[c(1,3),2:4] [,1] [,2] [,3] [1,] 102 7 10 [2,] 6 9 12 #剔除第3行、第2列 > A[-3,-2] [,1] [,2] [,3] [,4] [1,] 1 7 10 13 [2,] 2 8 11 14

我们再来看一个例子:

> head(state.x77)

image-20220901085753902

> head(state.x77)[,"Income"]

image-20220901090123404

矩阵的行和列的命名问题 > score score score [,1] [,2] [,3] [1,] 80 65 56 [2,] 90 87 78 [3,] 70 97 92 > rnames cnames dimnames(score) score Eng Math R LInda 80 65 56 James 90 87 78 John 70 97 92 矩阵运算 函数说明rowSums(x)对行求和colSums(x)对列求和sum(x)矩阵求和 #创建一个4*5的矩阵 > x x [,1] [,2] [,3] [,4] [,5] [1,] 1 2 3 4 5 [2,] 6 7 8 9 10 [3,] 11 12 13 14 15 [4,] 16 17 18 19 20 #对行求和 > rowSums(x) [1] 15 40 65 90 #对列求和 > colSums(x) [1] 34 38 42 46 50 #矩阵求和 > sum(x) [1] 210 矩阵相乘 > x x [,1] [,2] [1,] 1 3 [2,] 2 4 # %*% 等同于行列式的乘法 > x%*%x [,1] [,2] [1,] 7 15 [2,] 10 22 矩阵与标量相乘 > x 3*x [,1] [,2] [1,] 3 9 [2,] 6 12 矩阵与向量相加 > x x [,1] [,2] [1,] 1 2 [2,] 3 4 > x+10:13 [,1] [,2] [1,] 11 14 [2,] 14 17 矩阵元素筛选 > x x [,1] [,2] [1,] 1 2 [2,] 2 3 [3,] 3 4 > x[x[,2]>=3,] [,1] [,2] [1,] 2 3 [2,] 3 4

Step 1:

> j=3 > j [1] FALSE TRUE TRUE

Step 2:

x[j,]

说明:

x[,2]是向量>=用于比较两个向量数值3被自动重复,变成一个长度为3的向量

简单来说就是选择第2列大于等于3的行

🎇筛选规则可以基于被筛选变量之外的变量

> z x [,1] [,2] [1,] 1 2 [2,] 2 3 [3,] 3 4 > x[z%%2==1,] [,1] [,2] [1,] 1 2 [2,] 3 4

z%%2==1,返回一个逻辑向量 TRUE FALSE TRUE,x[z%%2==1,]选取对应的行,即第2行、第3行。

🎇筛选规则基于复杂的逻辑运算

> m m [,1] [,2] [1,] 1 4 [2,] 2 5 [3,] 3 6 > m[m[,1]>1 & m[,2]>5,] [1] 3 6

说明:& 是向量的逻辑“与”,&&是标量的逻辑“与”

m[,1]>1 选取第1列大于1的行,符合要求的有2、3行

m[,2]>5 选取第2列大于5的行,符合要求的只有第3行

又使用了与运算符,选择同时满足两个条件的第3行,最后返回第3行的元素

which函数在矩阵中的应用 > m m [,1] [,2] [1,] 5 -1 [2,] 2 10 [3,] 9 11 > which(m>2) [1] 1 3 5 6

which返回的是条件表达式为真的元素所在的位置值

n x+10:13 [,1] [,2] [1,] 11 14 [2,] 14 17 > m m [,1] [,2] [1,] 5 -1 [2,] 2 10 [3,] 9 11 > which.max(m)#取矩阵m最大值下标 [1] 6 > which.min(m)#取矩阵m最小值下标 [1] 4 R语言中的%in%运算符

判断前面一个向量内的元素是否在后面一个向量中,返回布尔值。

> a a [1] 14 4 10 5 13 11 3 12 2 8 > b a %in% b [1] FALSE TRUE TRUE TRUE FALSE FALSE TRUE FALSE TRUE TRUE

提取a在b中出现的元素

> a[a %in% b] [1] 4 10 5 3 2 8

提取a没有在b中出现的元素

> a[!(a%in%b)] > [1] 14 13 11 12 > score score score [,1] [,2] [,3] [1,] 80 65 56 [2,] 90 87 78 [3,] 70 97 92 > rnames cnames dimnames(score) score Eng Math R LInda 80 65 56 James 90 87 78 John 70 97 92 对矩阵的行和列调用函数

*apply()函数系列是R中最受欢迎同时也是最常用的函数族,包括apply(), tapply(), 和lapply()。

apply()功能:

Retruns a vector or array or list of values obtained by applying a function to margins of an array or matrix.

apply()一般形式:

apply(x,dimcode,f,fargs)

说明:

x是一个矩阵dimcode是维度编号,取值为1代表对每一行应用函数,取值为2代表对每一列应用函数,取值为c(1,2)对行和列都进行操作f是应用在行或列上的函数fargs是f的可选参数集 apply()函数 > m m [,1] [,2] [1,] 1 4 [2,] 2 5 [3,] 3 6 > apply(m,2,mean) [1] 2 5 > apply(m,2,function(x) mean(x)+2) [1] 4 7 避免意外降维 > x x [,1] [,2] [1,] 1 5 [2,] 2 6 [3,] 3 7 [4,] 4 8 > r r [1] 2 6

验证r是向量的方法

方法1:

> is.vector(r) [1] TRUE

方法2:

> attributes(x) $dim [1] 4 2 > attributes(r) NULL

方法3:

> str(x) int [1:4, 1:2] 1 2 3 4 5 6 7 8 > str(r) int [1:2] 2 6

可以加上drop=FALSE,避免降维

> r str(r) int [1, 1:2] 2 6

(x) mean(x)+2) [1] 4 7

## 避免意外降维 ```R > x x [,1] [,2] [1,] 1 5 [2,] 2 6 [3,] 3 7 [4,] 4 8 > r r [1] 2 6

验证r是向量的方法

方法1:

> is.vector(r) [1] TRUE

方法2:

> attributes(x) $dim [1] 4 2 > attributes(r) NULL

方法3:

> str(x) int [1:4, 1:2] 1 2 3 4 5 6 7 8 > str(r) int [1:2] 2 6

可以加上drop=FALSE,避免降维

> r str(r) int [1, 1:2] 2 6


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有