用R滤波距离矩阵

用R滤波距离矩阵,r,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") 我需要的是: values ind pp 1: 0.0 A C 以下是一种方法: mat <- c(1,

我将距离矩阵转换为两列
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")
我需要的是:

    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]])

A
C
)的
值不应该
1.0
?你完全正确,我的错误,这是一个距离矩阵,需要澄清;不是我的否决票。顺便说一句,否决票在这里是不合法的。问题包含样本数据、清晰的问题陈述、可复制的代码和预期输出。这仍然是一个问题还是类型解决了它?我不确定当
mat
中没有0时,您如何获得预期输出。你能解释一下吗?很高兴能帮上忙!请考虑接受我的回答。
    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]])