我有两个数据框,第一个:
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))
我想看看是否有可能这样做:
MainNumbers中一行中的每个值都应为x1
euc.dist
值
MainOperator中一行中的每个值都应为x2
euc.dist
值
对于x1
中的每个值,euc.dist
中的每个值都会计算每个x2
。那里
MainNperator中MainNumbers值较小,MainOperator值较多。这意味着我应该采取
MainNumbers的第一行为x1
,MainOperator中的每个值为x2
。该
结果应该是仅由第一行的计算制成的列
MainNumber和MainOperator中的每个数字。第二栏应该是
将第二行MainNumbers计算为x1
和的结果
作为MainOperator中每个值的x2
。
MainOperator中的第三行和每个值都相同。
最终结果应该是一个包含3列的数据框,以便列应该是
填充了euc. dist
中来自两个数据框的值,其中每列都是
一行MainNumbers和MainOperator的每个值的结果。
非常感谢!
编辑: 以下是我尝试解决此问题的方法:
我有一个模糊的想法,如何解决这个问题,这是我想到的假设:
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。式。但我不知道如何采取每一行并使用它 作为单独的数字向量。说实话,我对复杂的循环并不是很好。
答案 0 :(得分:0)
我自己找到了:
apply(MainOperator,1,function(MainOperator) (apply(MainNumbers,1,function(MainNumbers,MainOperator)dist(rbind(MainNumbers,MainOperator)),MainOperator)))