计算两个数据集的元素之间的欧几里德距离

时间:2018-05-02 17:01:15

标签: r dataframe distance

我有两个相同大小的数据集:

>df1

    c  d  e
a   2  3  4
b   5  1  3

>df2

   h  i  j
f  1  1  2
g  0  4  3

我需要计算这些数据集的相同元素之间的欧几里德距离,以获得:

   c  d  e
a  1  2  2
b  5  3  0

我尝试过使用dist(rbind(df1, df2)),但结果只提供了一个条目。

我必须使用大量数据集执行此操作,这就是为什么您的帮助将得到真正的赞赏。

2 个答案:

答案 0 :(得分:2)

如果数据框都是数字并且具有相同的列号和行号,则以下内容将起作用。

df3 <- abs(df1 - df2)
df3
#   c d e
# a 1 2 2
# b 5 3 0

数据

df1 <- read.table(text = "    c  d  e
a   2  3  4
                  b   5  4  3",
                  header = TRUE, stringsAsFactors = FALSE, row.names = 1)

df2 <- read.table(text = "    h  i  j
f  1  1  2
                  g  0  1  3",
                  header = TRUE, stringsAsFactors = FALSE, row.names = 1)

答案 1 :(得分:1)

鉴于您的更新,解决方案是做差异的绝对值(abs):

abs(df1 - df2)

如果你想重复这个过程,你可以做一个功能:

myfunc1 <- function(x1,x2){
  abs(x1 - x2)
}
myfunc1(df1, df2)

输出看起来像预期的那样:

     [,1] [,2] [,3]
[1,]    1    2    2
[2,]    5    3    0