距离矩阵输出
利用vegan包中的varespec 数据构建示例数据,生成下三角的距离矩阵。
library(vegan)
data(varespec)
# 求spec 间的距离需要对数据进行转制 — t()
var_dis <- vegdist(t(varespec), method = 'bray')
# dis类型的数据一般是下三角距离矩阵
# 若要输出在本地,需要首先转化为 matrix 类型
var_matrix <- as.matrix(var_dis)
上下三角提取
利用函数tril(){Matrix}; triu(){Matrix}; lower.tri(){base}; upper.tri(){base}进行上下三角提取。
# 提取矩阵对角线值
diag(var_matrix)
# 提取下三角,上三角将全用点(.)代替
tril(var_matrix)
# 提取上三角,下三角将全用点(.)代替;
triu(var_matrix)
# 上三角用指定值代替
var_matrix[upper.tri(var_matrix)] <- 0
# 下三角用指定值代替
var_matrix[lower.tri(var_matrix)] <- NA
距离矩阵—三元组
Matrix包内置了很多矩阵class,例如dgCMatrix,可以通过??dgCMatrix查看具体信息,同时R会列举所有class. matrix_class.png# 将上三角所有数据用0代替
var_matrix[upper.tri(var_matrix)] <- 0
dtC_mat = Matrix(var_matrix)
mat = summary(dgC_mat)
triplet_mat = as.data.frame(mat)
triplet_mat
三元组—矩阵
triplet_mat
# 根据三列数据的前两列可以确定原矩阵的维度
# 一般是前两列数据中的最大值
# 但有的矩阵输出时去掉对角0值,往往同时缺失了第一行和最后一行的坐标,所以实际情况需要进行适当判断
zero_mat = matrix(0, nrow = max(triplet_mat$i),
ncol = max(triplet_mat$j))
# mat[cbind(frame[,1], frame[,2])] <- frame$...2
str(triplet_mat)
# 利用三元组数据填充0矩阵
zero_mat[as.matrix(triplet_mat[1:2])] <- triplet_mat$x
# 利用下三角数据填充上三角,具有上三角函数亦同
zero_mat[upper.tri(zero_mat, diag = F)] =
t(zero_mat)[upper.tri(zero_mat, diag = F)]
zero_mat
网友评论