打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
将全矩阵转化为上三角或下三角矩阵



 不求做的最好,但求做的更好。”   --科白君


"小技巧"专题·第1篇
  编辑 | 科白维尼
  2092字 |5分钟阅读

今日分享
小技巧--将全矩阵转化成上三角矩阵或者下三角矩阵。作为"小技巧"专题的首篇,与大家分享一些比较常用的函数,主要是diag函数以及matrixpastedimt等函数的使用。(学会向help咨询,并掌握函数中主要的参数)记得看结尾的作者唠叨哟~

1) 构建一个新的矩阵
# 构建一个完整的矩阵
mat.1 <- matrix(1:16, # 1—16个向量
         ncol = 4, # 4列
         nrow = 4, # 4行
         byrow=TRUE, # byrow=T 表示向量按行的顺序进行,
                     #默认的话,会按列的顺序进行排列
      dimnames = list(c(paste("x", 1:4, sep = ".")),
# 对维度(行列)进行命名, 可以这么看list(x,y) 表示行列
          c(paste("y", 1:4, sep = ".")))) # x由x.1....x.4组成,
                                         # y由y.1....y.4组成
mat.1

对应结果:

2)修改矩阵的行列名

# 矩阵的行列名还可以使用rownames或者colnames进行修改
rownames(mat.1) <- paste("row", 1:4, sep=".")
colnames(mat.1) <- paste("col", 1:4, sep=".")
mat.1

对应结果:

3)数据维度与矩阵长宽置换

# 查看数据的维度
dim(mat.1) # 表示这是一个4行4列的矩阵
mat.2 <- matrix(51:66, nrow = 4)
mat.2

# 矩阵长宽转置,等同于excel的数据矩阵转置
t(mat.2)
mat.2

对应结果:

4)两个矩阵的计算

# 两个矩阵一一对应相加
mat.plus <- mat.1 + mat.2
mat.plus

# 两个矩阵一一对应相减
mat.minus <- mat.1 - mat.2
mat.minus

# 若A矩阵的维度为m*n,那么B矩阵的维度应为n*p
# 生成的结果矩阵的维度为m*p
mat.3 <- matrix(1:8, nrow = 4)
mat.3
dim(mat.3) # 4*2
dim(mat.1) # 4*4

# 矩阵相乘
mat.mcl <- mat.1 %*% mat.3
mat.mcl
dim(mat.mcl)

对应结果:

5) 将全矩阵转换成上三角或者下三角矩阵

# 提取矩阵对角线数据
diag(mat.1)

# 生成上三角矩阵,注意这里的diag参数如果为TRUE,
# 表示把矩阵对角也包括进来。设置为FALSE就是不包括。
mat.1[!upper.tri(mat.1, diag = TRUE)] <- 0
mat.1

# 生成下三角矩阵
mat.1[!lower.tri(mat.1, diag = TRUE)] <- 0
mat.1

对应结果:

作者唠叨:1)paste函数是一个很常用的函数,主要用于命名,尤其是在写循环的时候这个函数更为常见。今天主要与大家分享他简单的功能,paste("名称", 1:N, sep="x"),该语法表示,要对某个名称生成1到N的数量并以某个x字符隔开名称和数字。2)matrix函数主要用于生成数据矩阵,也是一个比较常用的函数,通常在编写函数时都会先用构建的数据。3)t函数更是一个常用的函数,通常我们拿到的数据是多种多样的,有时候和自己预期的数据格式不对。比如:行列的置换,与excel中的置换相同,但是需要注意的是,t函数在转换的时候可能会改变数据结构。在置换数据的时候可以这么写,as.data.frame(t(data))。4)diag函数是一个处理矩阵对角线的函数,在微生物生态领域,通常计算完betaNTI的时候,拿到的数据是一个完整的矩阵,我们通常在画图时只需要上三角或者下三角,然后可以再利用melt函数将宽数据处理成长数据,去除含0的值就可以了。

library(reshape2)
data_m
<- melt (mat.1)
head(data_m)
data_m_f
<- data_m %>% filter (value != 0)
data_m_f

感兴趣的同学可以通过以下方式与我们沟通、交流和学习:

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
3-数量遗传学课程介绍-R语言基础
R语言-基本数据类型的操作
第十一课 矩阵 |【小白学R系列】
Matlab中的diag函数用法
单细胞数据挖掘实战:文献复现(一)批量读取数据
[转载]R语言矩阵运算
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服