如何去掉R中的对角线

如何去掉R中的对角线,r,R,下面是我的r脚本,用于规范化数据集,然后使用dist()查找欧几里德距离 normalize_data如果我理解您的要求,您只需执行以下操作: mat<- matrix(c(0,1,3,4, 3,0,2,4, 1,2,0,6, 4,8,2,0),ncol=4,byrow=T,dimnames =list(c("R1","R2","R3","R4"),

下面是我的r脚本,用于规范化数据集,然后使用dist()查找欧几里德距离


normalize_data如果我理解您的要求,您只需执行以下操作:

mat<- matrix(c(0,1,3,4,
           3,0,2,4,
           1,2,0,6,
           4,8,2,0),ncol=4,byrow=T,dimnames =list(c("R1","R2","R3","R4"),
                                                  c("C1","C2","C3","C4")))

apply(mat,1,function(x)colnames(mat)[order(x)[2]])

您能提供您提供的欧几里德距离矩阵的预期输出吗?[1,2,0.234]#第一个元素是我用于计算欧几里德距离的第一个点的类标签,最近点的类标签中的第二个元素,第三个元素是距离本身请使用“编辑”在您的问题下链接,将此示例的完整预期输出编辑到问题本身中。另外,0.234来自何处?该值没有出现在您在问题中包含的数据中。这很有效,但我需要该最小值的类标签。正如我提到的,我的距离矩阵在第一列有类标签。您可以看到我在计算距离后使用cbind()组合类标签的代码。是否至少可以获取最小距离的索引/位置???@laxmi23我刚刚关闭了计算机,我现在正在使用手机,所以我不知道它是否能工作,但请尝试以下方法:colnames(mat)[which.min(x[x>0]),而不是applyIt中的min(),它不工作。它获取从1到num行的索引。但我想要那个特定值的索引。假设对于第1行,我在第10列找到了最小值,然后我需要那个位置。@laxmi23我更新了我的答案,现在我们有了您想要的
mat<- matrix(c(0,1,3,4,
           3,0,2,4,
           1,2,0,6,
           4,8,2,0),ncol=4,byrow=T,dimnames =list(c("R1","R2","R3","R4"),
                                                  c("C1","C2","C3","C4")))

apply(mat,1,function(x)colnames(mat)[order(x)[2]])
 R1   R2   R3   R4 
"C2" "C3" "C1" "C3"