我有两个相同大小的数据集:
>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))
,但结果只提供了一个条目。
我必须使用大量数据集执行此操作,这就是为什么您的帮助将得到真正的赞赏。
答案 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