如何找到两个数据帧之间的距离

时间:2014-11-03 18:13:52

标签: r

我有两个数据框,第一个:

first <- rnorm(3)
second <- rnorm(3)
third <- rnorm (3)

MainNumbers = data.frame(first,second,third)

第二个:

Operator1= rnorm(50)
Operator2= rnorm(50)

MainOperator= data.frame(Operator1,Operator2)

通过使用欧几里德距离:

euc.dist <- function(x1, x2) sqrt(sum((x1 - x2) ^ 2))

我想看看是否有可能这样做:

  1. MainNumbers中一行中的每个值都应为x1

  2. 中的euc.dist
  3. MainOperator中一行中的每个值都应为x2

  4. 中的euc.dist
  5. 对于x1中的每个值,euc.dist中的每个值都会计算每个x2。那里 MainNperator中MainNumbers值较小,MainOperator值较多。这意味着我应该采取 MainNumbers的第一行为x1,MainOperator中的每个值为x2。该  结果应该是仅由第一行的计算制成的列  MainNumber和MainOperator中的每个数字。第二栏应该是  将第二行MainNumbers计算为x1和的结果  作为MainOperator中每个值的x2。  MainOperator中的第三行和每个值都相同。

  6. 最终结果应该是一个包含3列的数据框,以便列应该是  填充了euc. dist中来自两个数据框的值,其中每列都是  一行MainNumbers和MainOperator的每个值的结果。

  7. 非常感谢!

    编辑: 以下是我尝试解决此问题的方法:

    我有一个模糊的想法,如何解决这个问题,这是我想到的假设:

    define empty data frame
    for each i in row(MainNumbers) use as x1 
    for j in row(Mainoperator) use as x2
    calculate euc. dist 
    save it in a empty data  frame as column
    repeat for each i rown(MainNumbers)
    

    到目前为止,我仍然坚持使用for循环以及如何将每个值放在x1中并进行计算 euc。 DIST。与第二个数据框中的每个其他值。我使用这段代码:

    for (i in 1:nrow(MainNumbers)) {
    
      x=as.numeric(as.vector(MainNumbers[i,]))
    
    }
    

    有了这个,我可以得到第一行是一个数字向量,然后我可以将它用作eust中的变量。 DIST。式。但我不知道如何采取每一行并使用它 作为单独的数字向量。说实话,我对复杂的循环并不是很好。

1 个答案:

答案 0 :(得分:0)

我自己找到了:

apply(MainOperator,1,function(MainOperator) (apply(MainNumbers,1,function(MainNumbers,MainOperator)dist(rbind(MainNumbers,MainOperator)),MainOperator)))