R语言学习笔记(三)--矩阵

矩阵创建矩阵matrix(data=NA,nrow=1,ncol=1,byrow=ALSE,dimnames=list(rownames,colnames))byrow:是否按行取数据,默认为不按行dimnames:各行各列的名称ps:如果创建的是矩阵,nrow(A)和NROW(A)以及ncol(A)和NCOL(A)表示的都是行数和列数;但如果创建的是向量,nrow(A)和ncol...
摘要由CSDN通过智能技术生成

矩阵

创建矩阵

matrix(data=NA,nrow=1,ncol=1,byrow=FALSE,dimnames=list(rownames,colnames))

byrow:是否按行取数据,默认为不按行
dimnames:各行各列的名称

ps:
如果创建的是矩阵,nrow(A)NROW(A)以及ncol(A)NCOL(A)表示的都是行数和列数
但如果创建的是向量,nrow(A)ncol(A)返回的是NULL,而NROW(A)NCOL(A)返回的则是列数和1,因为向量当作了列向量来看。

> matrix(1:12,ncol=4)
     [,1] [,2] [,3] [,4]
[1,]    1    4    7   10
[2,]    2    5    8   11
[3,]    3    6    9   12
> matrix(1:12,nrow=3,byrow=T) #按行取数据
     [,1] [,2] [,3] [,4]
[1,]    1    2    3    4
[2,]    5    6    7    8
[3,]    9   10   11   12
> data <- sample(55:100,12,replace=T)#随机抽样
> score <- matrix(data,nrow=3,
+            dimnames=list(c("张三","李四","赵二"),
+               c("数学","语文","英语","科学")))
> 
> score
     数学 语文 英语 科学
张三   58   75   84   91
李四   95   85   73   94
赵二   84   64   88   94

使用rowname还有colname可获取对应的行名列名,并进行整体修改或者单独修改

> rownames(A) #NULL
NULL
> rownames(score) #获取行的名字
[1] "张三" "李四" "赵二"
> colnames(score) #获取列的名字
[1] "数学" "语文" "英语" "科学"
==============================
> rownames(score) <- c("Tony","Lisa","Mary")
> rownames(score)[3] <- "John"
> score
     Math Chinese English Science
Tony   58      75      84      91
Lisa   95      85      73      94
John   84      64      88      94

矩阵索引

矩阵是二维的,通过索引A[i,j]查询第i行第j列,注意不是i+1和j+1
索引方法:

  1. 可以通过整数索引【负整数表示去掉这一行(列),比如-2表示去掉第二行(列)】;
  2. 可以通过字符串索引:A["Mary", "语文"]
  3. 可以通过向量索引:A[c(1,2,3)]选取第1,2,3行
  4. 可以通过逻辑索引:A[c(T,F,T)]选取逻辑值为T的行
  5. 可以直接根据行名、列名选择:A[c('Tony','John')],A[,c('Math','English')]
> s[3,2] #第3行第2列
[1] 100
> s[c(F,F,T,F,F), c(F,T,F,F)] #逻辑向量
[1] 100
> s["Mary", "语文"] #字符串向量
[1] 100
> s[c("Tony","John"),]
     数学 语文 英语 政治
Tony   71   94   64   90
John   83   73   82   84
> s[,"英语"]
Tony Lisa Mary John Adam 
  64   96   59   82   94 

选出其中一行或者某一列避免降维【变成向量】的方法:
A[2,,drop=F]

> fruit
       Q1 Q2 Q3 Q4
Apple  22 25 25 31
Orange 32 31 22 28
Banana 40 40 39 38
> class(fruit) #matrix
[1] "matrix"
> x <- fruit[2,]
> class(x) #integer 从矩阵降维成向量了
[1] "integer"
> x
Q1 Q2 Q3 Q4 
32 31 22 28 
> y <- fruit[2,,drop=F] #避免降维
> y
       Q1 Q2 Q3 Q4
Orange 32 31 22 28

利用逻辑行向量选择满足特定条件的行或者列:

> #第二季度销量大于30的水果的全年销售情况
> fruit[fruit[,2]>30,,drop=F] 
       Q1 Q2 Q3 Q4
Orange 32 31 22 28
Banana 40 40 39 38

矩阵的转置

> A <- matrix(1:12, nrow=3)
> A
     [,1] [,2] [,3] [,4]
[1,]    1    4    7   10
[2,]    2    5    8   11
[3,]    3    6    9   12
> B<-t(A) #矩阵转置
> B
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
[3,]    7    8    9
[4
  • 2
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值