【问题标题】:Create a pairwise distance matrix from the centre to sample points创建从中心到样本点的成对距离矩阵
【发布时间】:2016-04-15 11:47:03
【问题描述】:

我在下面的矩阵中有 5 个样本 (mydf)。中心到样本之间的欧几里德距离由距离列给出。如何在与中心相交的样本距离的成对组合(例如,A:A,A:B,A:C....E:E)之间形成关系矩阵。所以我需要计算从A到中心到A(A:A),然后从A到中心到B(A:B)的欧几里得距离,依此类推。比如A到中心到A的距离是(0.03994220+0.03994220),那么A到B是(0.03994220+0.03704120),以此类推。

mydf

  samples  Distance        
    A        0.03994220        
    B        0.03704120
    C        0.03580851
    D        0.04404073
    E        0.04350807

【问题讨论】:

  • @sotos 我无法创建成对矩阵。我只需要添加 A 到 A 、 A 到 B 、 A 到 C.. E 到 E 的距离。
  • 所以你想要另一个具有成对距离的数据框?
  • @Sotos 是的,我只想要另一个具有成对关系的数据框。

标签: r euclidean-distance


【解决方案1】:

这就是你所追求的吗?

df1 <- as.data.frame(outer(df$Distance,df$Distance, '+'))
df1
#          V1         V2         V3         V4         V5
#1 0.07988440 0.07698340 0.07575071 0.08398293 0.08345027
#2 0.07698340 0.07408240 0.07284971 0.08108193 0.08054927
#3 0.07575071 0.07284971 0.07161702 0.07984924 0.07931658
#4 0.08398293 0.08108193 0.07984924 0.08808146 0.08754880
#5 0.08345027 0.08054927 0.07931658 0.08754880 0.08701614

【讨论】:

  • 看看rownamescolnames
  • 抱歉,这不适用于我拥有的数据框:df&lt;-structure(list(V1 = structure(c(3L, 1L, 2L, 5L, 4L), .Names = c("860", "861", "862", "2529", "2530"), .Label = c("0.0321300642107672", "0.0330817724920314", "0.0339978194537914", "0.0413104564905709", "0.0415935059053326"), class = "factor")), .Names = "Distance", row.names = c("860", "861", "862", "2529", "2530"), class = "data.frame")
  • 先转换成数字
  • df$Distance &lt;- as.numeric(as.character(df$Distance))