Skip to content
Prev 138859 / 398506 Next

R code for selecting places spatially and by time

Andrew,

You haven't defined the problem clearly, but I will try to guess what
you mean...
I'm guessing that each row of your sample data represents one
infection event, and you want to find all rows where the date is
within 14 days following "2008-01-01" and the location is within 3 km
of any of the sites listed as "2008-01-01".

Presumably the x and y coordinates are already in units of metres;
otherwise use "project" in package rgdal.

Then:

x <- rep(c(2660156,2660203,2658165,2659303,2661531,2660914),c(2,2,2,2,1,1)
)
y <- rep(c(6476767,6475013,6475487,6479659,6477004,6476388),c(2,2,2,2,1,1)
)
date <- rep(as.Date(c("2008-01-02","2008-01-17","2008-01-01"),
    format = "%Y-%m-%d"),c(4,4,2))
## the set of properties or infections or something
props <- data.frame(x, y, date)
## find indices of source events
src.date <- as.Date("2008-01-01")
src.i <- which(date == src.date)
## distances between properties
dists <- as.matrix(dist(cbind(x,y)))
## select sites within space and time bounds
hits <- FALSE
for (i in src.i) {
    i.hits <- (src.date < date) & (date <= src.date + 14) &
        (dists[i,] < 3000)
    hits <- hits | i.hits
}
## look at matching sites
props[hits,]
## look at distances of matching sites from source sites
dists[src.i,hits]


It would also be possible to do it more efficiently if that is an issue.


On Fri, Mar 7, 2008 at 9:40 AM, Andrew McFadden
<Andrew.McFadden at maf.govt.nz> wrote: