zerodist.Rd
find point pairs with equal spatial coordinates
zerodist(obj, zero = 0.0, unique.ID = FALSE, memcmp = TRUE)
zerodist2(obj1, obj2, zero = 0.0, memcmp = TRUE)
remove.duplicates(obj, zero = 0.0, remove.second = TRUE, memcmp = TRUE)
object of, or extending, class SpatialPoints
object of, or extending, class SpatialPoints
object of, or extending, class SpatialPoints
distance values less than or equal to this threshold value are considered to have zero distance (default 0.0); units are those of the coordinates for projected data or unknown projection, or km if coordinates are defined to be longitude/latitude
logical; if TRUE, return an ID (integer) for each point that is different only when two points do not share the same location
use memcmp
to find exactly equal coordinates; see NOTE
logical; if TRUE, the second of each pair of duplicate points is removed, if FALSE remove the first
zerodist
and zerodist2
return a two-column matrix
with in each row pairs of row numbers with identical coordinates;
a matrix with zero rows is returned if no such pairs are found. For
zerodist
, row number pairs refer to row pairs in obj
. For
zerodist2
, row number pairs refer to rows in obj
and
obj2
, respectively. remove.duplicates
removes duplicate
observations if present, and else returns obj
.
When using kriging, duplicate observations sharing identical spatial locations result in singular covariance matrices. This function may help identify and remove spatial duplices. The full matrix with all pair-wise distances is not stored; the double loop is done at the C level.
When unique.ID=TRUE
is used, an integer index is returned. sp
1.0-14 returned the highest index, sp 1.0-15 and later return the
lowest index.
When zero
is 0.0 and memcmp
is not FALSE
,
zerodist
uses memcmp
to evaluate exact equality of
coordinates; there may be cases where this results in a different
evaluation compared to doing the double arithmetic of computing
distances.
data(meuse)
summary(meuse)
#> x y cadmium copper
#> Min. :178605 Min. :329714 Min. : 0.200 Min. : 14.00
#> 1st Qu.:179371 1st Qu.:330762 1st Qu.: 0.800 1st Qu.: 23.00
#> Median :179991 Median :331633 Median : 2.100 Median : 31.00
#> Mean :180005 Mean :331635 Mean : 3.246 Mean : 40.32
#> 3rd Qu.:180630 3rd Qu.:332463 3rd Qu.: 3.850 3rd Qu.: 49.50
#> Max. :181390 Max. :333611 Max. :18.100 Max. :128.00
#>
#> lead zinc elev dist
#> Min. : 37.0 Min. : 113.0 Min. : 5.180 Min. :0.00000
#> 1st Qu.: 72.5 1st Qu.: 198.0 1st Qu.: 7.546 1st Qu.:0.07569
#> Median :123.0 Median : 326.0 Median : 8.180 Median :0.21184
#> Mean :153.4 Mean : 469.7 Mean : 8.165 Mean :0.24002
#> 3rd Qu.:207.0 3rd Qu.: 674.5 3rd Qu.: 8.955 3rd Qu.:0.36407
#> Max. :654.0 Max. :1839.0 Max. :10.520 Max. :0.88039
#>
#> om ffreq soil lime landuse dist.m
#> Min. : 1.000 1:84 1:97 0:111 W :50 Min. : 10.0
#> 1st Qu.: 5.300 2:48 2:46 1: 44 Ah :39 1st Qu.: 80.0
#> Median : 6.900 3:23 3:12 Am :22 Median : 270.0
#> Mean : 7.478 Fw :10 Mean : 290.3
#> 3rd Qu.: 9.000 Ab : 8 3rd Qu.: 450.0
#> Max. :17.000 (Other):25 Max. :1000.0
#> NA's :2 NA's : 1
# pick 10 rows
n <- 10
ran10 <- sample(nrow(meuse), size = n, replace = TRUE)
meusedup <- rbind(meuse, meuse[ran10, ])
coordinates(meusedup) <- c("x", "y")
zd <- zerodist(meusedup)
sum(abs(zd[1:n,1] - sort(ran10))) # 0!
#> [1] 489
# remove the duplicate rows:
meusedup2 <- meusedup[-zd[,2], ]
summary(meusedup2)
#> Object of class SpatialPointsDataFrame
#> Coordinates:
#> min max
#> x 178605 181390
#> y 329714 333611
#> Is projected: NA
#> proj4string : [NA]
#> Number of points: 155
#> Data attributes:
#> cadmium copper lead zinc
#> Min. : 0.200 Min. : 14.00 Min. : 37.0 Min. : 113.0
#> 1st Qu.: 0.800 1st Qu.: 23.00 1st Qu.: 72.5 1st Qu.: 198.0
#> Median : 2.100 Median : 31.00 Median :123.0 Median : 326.0
#> Mean : 3.246 Mean : 40.32 Mean :153.4 Mean : 469.7
#> 3rd Qu.: 3.850 3rd Qu.: 49.50 3rd Qu.:207.0 3rd Qu.: 674.5
#> Max. :18.100 Max. :128.00 Max. :654.0 Max. :1839.0
#>
#> elev dist om ffreq soil lime
#> Min. : 5.180 Min. :0.00000 Min. : 1.000 1:84 1:97 0:111
#> 1st Qu.: 7.546 1st Qu.:0.07569 1st Qu.: 5.300 2:48 2:46 1: 44
#> Median : 8.180 Median :0.21184 Median : 6.900 3:23 3:12
#> Mean : 8.165 Mean :0.24002 Mean : 7.478
#> 3rd Qu.: 8.955 3rd Qu.:0.36407 3rd Qu.: 9.000
#> Max. :10.520 Max. :0.88039 Max. :17.000
#> NA's :2
#> landuse dist.m
#> W :50 Min. : 10.0
#> Ah :39 1st Qu.: 80.0
#> Am :22 Median : 270.0
#> Fw :10 Mean : 290.3
#> Ab : 8 3rd Qu.: 450.0
#> (Other):25 Max. :1000.0
#> NA's : 1
meusedup3 <- subset(meusedup, !(1:nrow(meusedup) %in% zd[,2]))
summary(meusedup3)
#> Object of class SpatialPointsDataFrame
#> Coordinates:
#> min max
#> x 178605 181390
#> y 329714 333611
#> Is projected: NA
#> proj4string : [NA]
#> Number of points: 155
#> Data attributes:
#> cadmium copper lead zinc
#> Min. : 0.200 Min. : 14.00 Min. : 37.0 Min. : 113.0
#> 1st Qu.: 0.800 1st Qu.: 23.00 1st Qu.: 72.5 1st Qu.: 198.0
#> Median : 2.100 Median : 31.00 Median :123.0 Median : 326.0
#> Mean : 3.246 Mean : 40.32 Mean :153.4 Mean : 469.7
#> 3rd Qu.: 3.850 3rd Qu.: 49.50 3rd Qu.:207.0 3rd Qu.: 674.5
#> Max. :18.100 Max. :128.00 Max. :654.0 Max. :1839.0
#>
#> elev dist om ffreq soil lime
#> Min. : 5.180 Min. :0.00000 Min. : 1.000 1:84 1:97 0:111
#> 1st Qu.: 7.546 1st Qu.:0.07569 1st Qu.: 5.300 2:48 2:46 1: 44
#> Median : 8.180 Median :0.21184 Median : 6.900 3:23 3:12
#> Mean : 8.165 Mean :0.24002 Mean : 7.478
#> 3rd Qu.: 8.955 3rd Qu.:0.36407 3rd Qu.: 9.000
#> Max. :10.520 Max. :0.88039 Max. :17.000
#> NA's :2
#> landuse dist.m
#> W :50 Min. : 10.0
#> Ah :39 1st Qu.: 80.0
#> Am :22 Median : 270.0
#> Fw :10 Mean : 290.3
#> Ab : 8 3rd Qu.: 450.0
#> (Other):25 Max. :1000.0
#> NA's : 1
coordinates(meuse) <- c("x", "y")
zerodist2(meuse, meuse[c(10:33,1,10),])
#> [,1] [,2]
#> [1,] 10 1
#> [2,] 11 2
#> [3,] 12 3
#> [4,] 13 4
#> [5,] 14 5
#> [6,] 15 6
#> [7,] 16 7
#> [8,] 17 8
#> [9,] 18 9
#> [10,] 19 10
#> [11,] 20 11
#> [12,] 21 12
#> [13,] 22 13
#> [14,] 23 14
#> [15,] 24 15
#> [16,] 25 16
#> [17,] 26 17
#> [18,] 27 18
#> [19,] 28 19
#> [20,] 29 20
#> [21,] 30 21
#> [22,] 31 22
#> [23,] 32 23
#> [24,] 33 24
#> [25,] 1 25
#> [26,] 10 26