用 R 过滤距离矩阵

福斯蒂诺·德尔加多

我将距离矩阵转换为两列data.frame,我想过滤掉“对角线”和“>0”值,保持相同的对象。

我有一个距离矩阵像

mat<-c(0,0.5,0,0.5,0,0.3,0,0.3,0)
dim(mat)<-c(3,3)
rownames(mat)<-c("A","B","C")
colnames(mat)<-c("A","B","C")

我试过了

df = as.data.table(mat)
df1 <- stack(df)
setDT(df1)
df1[, pp := colnames(df)]
setkey(df1, values)

这使

    values ind pp
1:    0.0   A  A
2:    0.0   A  C
3:    0.0   B  B
4:    0.0   C  A
5:    0.0   C  C
6:    0.3   B  C
7:    0.3   C  B
8:    0.5   A  B
9:    0.5   B  A

我需要的:

    values ind pp
1:    0.0   A  C
克莱桑

这是一种方法:

mat <- c(1,0.5,0,0.5,1,0.3,0,0.3,1)
dim(mat) <- c(3,3)
rownames(mat) <- c("A","B","C")
colnames(mat) <- c("A","B","C")

cond <- mat == 0 & upper.tri(mat, FALSE)
pos <- which(cond, arr.ind = TRUE)
data.frame(values = mat[pos], ind = rownames(mat)[pos[,1]], pp = rownames(mat)[pos[,2]])

cond 是您的条件的布尔矩阵,值等于 0,而不是对角矩阵和上三角矩阵,以删除对称矩阵的重复索引。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章