[R] Calculating distances between points in a data frame?

Gabor Grothendieck ggrothendieck at myway.com
Mon May 31 18:44:28 CEST 2004


Try using running from the gregmisc package with pad = TRUE:


require(gregmisc)
XY <- data.frame(num = seq(0,10), X = seq(0,30,3), Y = seq(0, 40, 4) )
DistXY <- function(idx) {
   i <- idx[2]
   with(XY, sqrt( (X[i]-X[i-1])^2 + (Y[i]-Y[i-1])^2 ) )
}
XY$Dist <- running( 1:nrow(XY), width=2, fun = DistXY, pad = TRUE )


Sander Oom <slist <at> oomvanlieshout.net> writes:

: 
: Dear list,
: 
: I would like to calculate the distance between consecutive points in a data 
: frame. Of course the first point in the data frame does not have a point of 
: origin, and should get a value NA. I have tried two different loops, which 
: both result in error:
: 
:  > num <- seq(0,10,1)
:  > X <- seq(0,30,3)
:  > Y <- seq(0,40,4)
:  > XY <- data.frame(num, X, Y)
:  > attach(XY)
:  > summary(XY)
:        num             X              Y
:   Min.   : 0.0   Min.   : 0.0   Min.   : 0
:   1st Qu.: 2.5   1st Qu.: 7.5   1st Qu.:10
:   Median : 5.0   Median :15.0   Median :20
:   Mean   : 5.0   Mean   :15.0   Mean   :20
:   3rd Qu.: 7.5   3rd Qu.:22.5   3rd Qu.:30
:   Max.   :10.0   Max.   :30.0   Max.   :40
:  > plot(X,Y)
:  > rngNum <- range(num)
:  > for (i in rngNum){
: +     XY$DistXY[i] <- sqrt( ((X[i]-X[i-1])^2) + ((Y[i]-Y[i-1])^2) )
: + }
: Error in "$<-.data.frame"(`*tmp*`, "DistXY", value = sqrt(((X[i] - X[i -  :
:          replacement has 10 rows, data has 11
:  > for (i in rngNum){
: +     XY$DistXY2[i] <- ifelse(i=min(rngNum), NA, sqrt(((X[i]-X[i-1])^2) + 
: ((Y[i]-Y[i-1])^2)) )
: + }
: Error in ifelse(i = min(rngNum), NA, sqrt(((X[i] - X[i - 1])^2) + ((Y[i] -  :
:          unused argument(s) (i ...)
:  > detach(XY)
:  >
: 
: Any suggestions much appreciated,
: 
: Sander Oom.
: 
: --------------------------------------------------------------
: Dr. Sander P. Oom
: Animal, Plant and Environmental Sciences
: University of the Witwatersrand
: Private Bag 3
: Wits 2050
: South Africa
: 
: Tel (work)      +27 (0)11 717 64 04
: Tel (home)      +27 (0)18 297 44 51
: Fax             +27 (0)18 299 24 64
: 
: Email   sander <at> oomvanlieshout.net
: Web     www.oomvanlieshout.net/sander
: 
: ______________________________________________
: R-help <at> stat.math.ethz.ch mailing list
: https://www.stat.math.ethz.ch/mailman/listinfo/r-help
: PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
: 
:




More information about the R-help mailing list