R code for selecting places spatially and by time
Andrew McFadden <Andrew.McFadden <at> maf.govt.nz> writes:
Hi all
The code of trying to write relates to selecting properties (given by x
and y co-ordinates) spatially (distance "X" from "infected" properties
identified by date) over a certain time period.
i.e. what properties are within 3 km from properties infected on
"2008-01-01" over the last 14 days.
Is any one able to give me some clues on how to write code to solve this
problem.
Some sample data is as follows:
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<-as.character(rep(as.Date(c("2008-01-02","2008-01-17","2008-01-01")
,format = "%Y-%m-%d"),c(4,4,2)))
cbind(x,y,date)
This should certainly be possible. Your description of the
problem isn't entirely clear to me, but here's a first approximation:
dat <- data.frame(x,y,date)
## data.frame is better than cbind, it can hold dates and locations
infdate <- as.Date("2008-01-01")
infprem <- subset(dat,date==infdate)
otherprem <- subset(dat,date>=infdate)
## or:
elapsed <- dat$date-infdate
otherprem <- subset(dat,elapsed>0 & elapsed<14)
## I'm not sure this is what you wanted in terms
## of date restrictions, but you could adjust appropriately
dist <- sqrt(outer(infprem$x,otherprem$x,"-")^2+
outer(infprem$y,otherprem$y,"-")^2)
mindist <- apply(dist,2,min)
minval <- 1000 ## (I don't know what the units are??)
prem <- subset(otherprem,mindist<minval)
## or prem <- otherprem[mindist<minval,]