[R] Euclidean Distance in 3 Dimensions

Don McKenzie dmck at u.washington.edu
Wed Aug 20 22:57:49 CEST 2014

```?dist

from the help

dist {stats}	R Documentation
Distance Matrix Computation

Description

This function computes and returns the distance matrix computed by using the specified distance measure to compute the distances between the rows of a data matrix.

Is this what you want?  Computing on a matrix whose rows are your x, y, and z values?

On Aug 20, 2014, at 1:12 PM, Patzelt, Edward <patzelt at g.harvard.edu> wrote:

> R Community -
>
> I am attempting to write a function that will calculate the distance
> between points in 3 dimensional space for unique regions (e.g. localized
> brain regions such as the frontal lobe).
>
> For example I'm looking to compare each point in region 45 to every other
> region in 45 to establish if they are a distance of 8 or more apart. I can
> do this linearly comparing each distance to the previous but this is not
> comparing all points.
>
> structure(list(Cluster.Index = c(46L, 46L, 46L, 46L, 46L, 45L,
> 45L, 45L, 45L, 45L, 44L, 44L, 44L, 44L, 44L, 43L, 43L, 43L, 43L,
> 43L), Value = c(8.21, 7.96, 7.85, 7.83, 7.8, 5.38, 4.56, 4.5,
> 4, 3.99, 5.42, 4.82, 4.21, 4.18, 3.91, 4.79, 4.27, 3.24, 3.06,
> 3.04), x = c(33L, 38L, 37L, 36L, 38L, 47L, 42L, 43L, 44L, 42L,
> 50L, 41L, 39L, 41L, 44L, 46L, 45L, 45L, 41L, 46L), y = c(15L,
> 12L, 12L, 13L, 13L, 91L, 84L, 84L, 95L, 96L, 69L, 70L, 65L, 65L,
> 59L, 41L, 40L, 46L, 44L, 47L), z = c(41L, 38L, 41L, 39L, 33L,
> 39L, 40L, 42L, 44L, 45L, 34L, 36L, 30L, 35L, 39L, 53L, 47L, 61L,
> 52L, 57L), X = c(NA, 6.557438524302, 3.16227766016838, 2.44948974278318,
> 6.32455532033676, 78.7464284904401, 8.66025403784439, 2.23606797749979,
> 11.2249721603218, 2.44948974278318, 30.2324329156619, 9.2736184954957,
> 8.06225774829855, 5.3851648071345, 7.81024967590665, 22.8910462845192,
> 6.16441400296898, 15.2315462117278, 10.0498756211209, 7.68114574786861
> )), .Names = c("Cluster.Index", "Value", "x", "y", "z", "X"), row.names =
> c(NA,
> 20L), class = "data.frame")
>
> mainDat <- data.frame()
> for(i in 2:nrow(dat)){
> tempDist <- (sqrt((dat\$x[i] - dat\$x[i-1])^2 + (dat\$y[i] - dat\$y[i-1])^2 +
> (dat\$z[i] - dat\$z[i-1])^2))
> dat\$X[i] <- c(tempDist)
> if(dat\$Cluster.Index[i] != dat\$Cluster.Index[i-1]){
> mainDat <- rbind(mainDat, dat[i,])
> }
> if((dat\$Cluster.Index[i] == dat\$Cluster.Index[i-1])) {
> if(tempDist > 8){
> mainDat <- rbind(mainDat, dat[i,])
> }
> }
> }
>
>
>
>
> --
>
> *Edward H Patzelt | Clinical Science PhD StudentPsychology | Harvard
> University *
>
> 	[[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> and provide commented, minimal, self-contained, reproducible code.

Don McKenzie
Research Ecologist
Pacific Wildland Fire Sciences Lab
US Forest Service

Affiliate Professor
School of Environmental and Forest Sciences
University of Washington
dmck at uw.edu

```