R语言(一)向量与矩阵

一、向量部分

R语言基础入门(学习笔记通俗易懂版)_r语言 csdn_CYH-BI的博客-CSDN博客

二、矩阵部分

1.创建矩阵格式:

①直接创建法

matric()

> mydata<-matrix(c(1,2,3,4,5,6),nrow=2,ncol=3)     #两行三列,默认按列排
> mydata
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6
> mydata1<-matrix(c(1,2,3,4,5,6),nrow=2,ncol=3,byrow=T)    #两行三列,按行排
> mydata1
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
> mydata3<—matrix(c(1,2,3,4,5,6),nrow=2,ncol=3,dimnames=list(c("r1","r2"),c("c1","c2","c3")))
> mydata3            #设置了名字,名字要用列表list形式,如上一行代码
   c1 c2 c3
r1  1  3  5
r2  2  4  6

对行列命名的另外一种方法:

m=matrix(c(1,2,3,4,5,6,7,8,9),3,3)
colnames(m) = c("数学", "语文", "英语")
rownames(m) = c("小学","高中", "初中")

②向量拼接法

横向量拼接和纵向量拼接

rbind和cbind

> mydata5<-rbind(c(1,2,3),c(4,5,6))   #按行将两个向量接起来,形成矩阵
> mydata5
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
> mydata6<-cbind(c(1,2,3),c(4,5,6))    #按列将两个向量接起来,形成矩阵
> mydata6
     [,1] [,2]
[1,]    1    4
[2,]    2    5
[3,]    3    6

③强制转换为矩阵

利用as.matrix()函数强制转换为矩阵,如:

> a<-c(1,2,3,4,5,6,7,8)
> a1<-as.matrix(a)   #强制转换为矩阵,但是只有一列
> a1
     [,1]
[1,]    1
[2,]    2
[3,]    3
[4,]    4
[5,]    5
[6,]    6
[7,]    7
[8,]    8

④建立一个空矩阵

直接写行列大小,如下:

> d<-matrix(nrow=3,ncol=2)   #建立一个3行2列的空矩阵,内容为NA,存在但未知
> d
     [,1] [,2]
[1,]   NA   NA
[2,]   NA   NA
[3,]   NA   NA

注意事项:

当两个向量长度不相等时,会出现警告,长度不等的那个向量会用循环补齐的形式填补

当向量中含有不同类型的数据时,会改变元素类型后转变为矩阵

2、矩阵的索引

mymartix[i,],返回矩阵mymatrix中第i行元素

mymartix[,j],返回矩阵mymatrix中第j列元素

mymartix[i,j],返回矩阵mymatrix中第i行j列元素

mymatrix[i,-j],返回第i行,但排除第j列元素

mymatrix[c(m,n),c(p,k)],返回第m和n行,第p和k列元素

mymatrix[-c(m,n),c(p,k)],返回第p和k列,但排除第m和n行元素

当矩阵有行列名时,可以通过行与列名进行提取元素

> mymatrix3							#这里有一个矩阵
       c1 c2 c3 c4 c5 行均值 
r1      1  6 11 16 21      11
r2      2  7 12 17 22      12
r3      3  8 13 18 23      13
r4      4  9 14 19 24      14
r5      5 10 15 20 25      15
列均值  3  8 13 18 23      NA
> mymatrix3["r1","c2"]			#返回列名c2,行名为r1的元素
[1] 6
> mymatrix3[c("r2","r4"),c("c3","c5")]		#返回行名为r2与r4,列名为c3与c5的元素
   c3 c5
r2 12 22
r4 14 24

3.矩阵相关操作

转置,函数t()

横向或纵向合并矩阵

cbind()函数横向合并矩阵

rbind()函数纵向合并矩阵

> M<-matrix(c(1,2,3,4),2,2)   
> N<-matrix(c(5,6,7,8),2,2)     #建立了两个矩阵M,N,如下
> M
     [,1] [,2]
[1,]    1    3
[2,]    2    4
> N
     [,1] [,2]
[1,]    5    7
[2,]    6    8
> cbind(M,N)			#横向合并矩阵M,N
     [,1] [,2] [,3] [,4]
[1,]    1    3    5    7
[2,]    2    4    6    8
> rbind(M,N)			#纵向合并矩阵M,N
     [,1] [,2]
[1,]    1    3
[2,]    2    4
[3,]    5    7
[4,]    6    8

③维度信息

维度信息,返回行列数目
dim(m2)

nrow(m2)
ncol(m2)

对各列或行求和或求均值

colSums()对各列求和,rowSums()对各行求和

colMeans()对各列求均值,rowMeans()对各行求均值,举例如下:

> mymatrix							#以这个矩阵举例
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    6   11   16   21
[2,]    2    7   12   17   22
[3,]    3    8   13   18   23
[4,]    4    9   14   19   24
[5,]    5   10   15   20   25
> colSums(mymatrix)				#对各列求和
[1]  15  40  65  90 115
> rowSums(mymatrix)				#对各行求和
[1] 55 60 65 70 75
> colMeans(mymatrix)			#对各列求均值
[1]  3  8 13 18 23
> rowMeans(mymatrix)			#对各行求均值
[1] 11 12 13 14 15

⑤计算行列式

det()函数

⑥矩阵相乘

使用%*%进行矩阵相乘

> M
     [,1] [,2]
[1,]    1    3
[2,]    2    4
> N
     [,1] [,2]
[1,]    5    7
[2,]    6    8
> K<-M%*%N			#两矩阵相乘
> K
     [,1] [,2]
[1,]   23   31
[2,]   34   46

⑦设置行列名

  • 在创建矩阵时设置行列名,如
  •   >   #使用dimnames,以列表的形式设置行列名
      > fa<-matrix(c(2,3,4,5),2,2,dimnames =list(c("第一行","第二行"),c("第一列","第二列")))
      > fa
             第一列 第二列
      第一行      2      4
      第二行      3      5
    

  • 在外部使用dimnames()函数设置行列名
  •   > fa1<-matrix(c(6,7,8,9),2,2)  #矩阵原先未设置行列名
      > a<-c("第一行","第二行")
      > b<-c("第一列","第二列")
      > dimnames(fa1)<-list(a,b)    #使用dimnames函数设置行列名
      > fa1
             第一列 第二列
      第一行      6      8
      第二行      7      9
    

  • 使用函数rownames()设置行名,使用colnames()设置列名
  • > fa2<-matrix(c(1,3,5,7),2,2)  #行列未命名的矩阵
    > rownames(fa2)<-c("A1","A2")     #对行命名
    > colnames(fa2)<-c("B1","B2")		#对列命名
    > fa2
       B1 B2
    A1  1  5
    A2  3  7
    

4.apply()函数

apply(m,dimcode,f,fargs) 允许用户在各行各列调用函数
m 矩阵,dimcode 1代表行, 2代表列,f函数,frags可选参数,函数大于一个参考时使用用“,”隔开。

5.判断对象是不是矩阵

is.matrix()

  • 21
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值