当我有距离矩阵(或基于矩阵的数据框)时,如何获得与给定值对应的行和列?
示例:
df <- data.frame(x = c(11:20), y= c(12:21))
dst <- dist(df)
输出:
1 2 3 4 5 6 7 8 9 2 1.414214 3 2.828427 1.414214 4 4.242641 2.828427 1.414214 5 5.656854 4.242641 2.828427 1.414214 6 7.071068 5.656854 4.242641 2.828427 1.414214 7 8.485281 7.071068 5.656854 4.242641 2.828427 1.414214 8 9.899495 8.485281 7.071068 5.656854 4.242641 2.828427 1.414214 9 11.313708 9.899495 8.485281 7.071068 5.656854 4.242641 2.828427 1.414214 10 12.727922 11.313708 9.899495 8.485281 7.071068 5.656854 4.242641 2.828427 1.414214
现在我要输入例如11.313708并得到输出(9,1)
答案 0 :(得分:5)
我们转换为矩阵并使用which
获取arr.ind=TRUE
的索引(假设它是您想要的)。
m1 <- as.matrix(dst)
which(m1==val, arr.ind=TRUE)
否则,如果我们已经知道值的索引,我们可以按行,列使用常规子集。正如@nicola在评论中提到的,浮点问题有可能发生。为了避免这种情况,可以round
然后进行比较。即
which(round(m1, 3)== 11.314, arr.ind=TRUE)
# row col
#9 9 1
#10 10 2
#1 1 9
#2 2 10