3

我有一个表示平面中点的数据框。

     x     y
1  0.0   0.0
2  0.2   0.0
3  0.3  -0.1
...

我想diff为该数据编写一个类似的函数。我已经编写了距离函数myDist(不是欧几里得),但是如何将它应用于数据框?

即:通过调用someFunction( myData, myDist ),我想获得一个向量,其值为myDist(myData[1,],myData[2,]), myDist(myData[2,],myData[3,]), myDist(myData[3,],myData[4,]), ...

是否有执行此操作的函数,还是我必须编写一个循环?

4

2 回答 2

2

解决了它lapply

lapply(seq_len(nrow(myData) - 1),
    function(i){
        myDist( myData[i,], myData[i+1,] )
    })
于 2012-11-22T02:45:52.303 回答
0

您可以使用head(myData, -1)andtail(myData, -1)获取 2 个数据集,其中行按您想要的方式排列,然后如果myDist是矢量化的,您只需将结果传递给myDist,如果它未矢量化,您可以使用(mapplyVectorize函数)sapply,或其他功能。lapplyapply

myData <- data.frame( x=1:10, y=sample(1:10), z=rnorm(10) )

myDist <- function( one, two ) {
    sqrt( rowSums( (one-two)^2 ) )
}

myDist( head(myData,-1), tail(myData,-1) )
于 2012-11-22T14:23:33.647 回答