2012-11-22 25 views
2

我有一個數據框表示一個平面上的點。如何將函數應用於data.frame中的行對,類似於diff?

 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,]),...

是否有這樣做,或者我必須寫一個循環的功能?

回答

2

lapply解決它:

lapply(seq_len(nrow(myData) - 1), 
    function(i){ 
     myDist(myData[i,], myData[i+1,]) 
    }) 
+0

我想你的意思'1:(nrow(MYDATA的)-1)'或更安全(和快速)'seq_len(nrow(MYDATA的) - 1)' – mnel

+0

是。不知道'seq_len',謝謝! – Andreas

0

你可以使用head(myData, -1)tail(myData, -1)拿到2個數據集與排一字排開,你所希望的方式,那麼如果myDist被矢量你只需將結果傳遞myDist,如果沒有向量化,則可以使用mapply(或Vectorize函數)或sapply,lapply,apply,循環或其他功能。

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)) 
相關問題