-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathBarber_GmapsDistance.R
More file actions
77 lines (57 loc) · 3.8 KB
/
Barber_GmapsDistance.R
File metadata and controls
77 lines (57 loc) · 3.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
rm(list=ls(all=TRUE)) # clear memory
packages<- c("ggmap") # list the packages that you'll need
lapply(packages, require, character.only=T) # load the packages, if they don't load you might need to install them first
#setwd("/mnt/smb/")
setwd("E:\\GISWork_2\\Barber_Distances\\")
#gmaps.key <- "AIzaSyDZy7HLVrouFTsULZ6D6ZyGub8iseJI_OU" #Unneeded!
index.string.all ="PLWHIV_ID"
append.dist.to.table2 <- function(base.table, from.name, to.name, name.string="none",index.string) {
if (name.string =="none"){name.string = to.name }
DF <- base.table[,c(index.string, from.name,to.name)]
DF$row.number <- 1:nrow(DF) #create an index number for each row
for (i in DF$row.number){
print(i)
orig <- DF[i,c(from.name)] # get origin from DF in the position line 'i', column 'from'
dest <- DF[i,c(to.name)] # get origin from DF in the position line 'i', column 'to'
a <- mapdist(from = orig, to = dest, mode = "driving",output = "simple") # create temp. df 'a' with the output from mapdist
a$row.number <- i # include in temp. df 'a' the index number of the row from DF
DF$minutes[match(a$row.number, DF$row.number)] <- a$minutes # use the index number as a matching key to input/update the value of the variable 'minutes'
#DF$hours[match(a$row.number, DF$row.number)] <- a$hours # ibdem DF$km[match(a$row.number, DF$row.number)] <- a$km #ibdem
DF$km[match(a$row.number, DF$row.number)] <- a$km # ibdem
}# end for loop
names(DF)[names(DF) == 'km'] <- paste(name.string,"_dist",sep="")
names(DF)[names(DF) == 'minutes'] <- paste(name.string,"_time",sep="")
DF
}#end append.dist.to.table
run.all.the.things<-function(file.name, in.data = barber.data, missing.values = c(" ", ""), to.name, from.name = "Match_addr", name.string, index.string=index.string.all){
if (file.exists(file.name)){
print("Loading file")
distances<-read.csv(file.name)
}
else{
complete.cases <- in.data[ which(!in.data[,to.name] %in% missing.values),] #tester <-complete.lab[1:10,]
distances <- append.dist.to.table2(base.table = complete.cases,from.name,to.name,name.string,index.string)
write.csv(distances,file.name, row.names = FALSE)
} #End Labs
distances
}#end Run.All.the.things
barber.data <- read.csv("Barber_HCF_Locs_geocoded.csv", stringsAsFactors=F)
#Labs
lab.distances <- run.all.the.things(file.name ="Barber_Lab_Distance.csv", to.name = "Lab_Locati", name.string = "Lab")
#PCP
pcp.distances <- run.all.the.things(file.name ="Barber_PCP_Distance.csv", to.name = "PCP_Locati", name.string = "PCP")
#IDS
ids.distances <- run.all.the.things(file.name ="Barber_IDS_Distance.csv", to.name = "IDS_Locati", name.string = "IDS")
#Pharmacy
pharm.distances <- run.all.the.things(file.name ="Barber_pharm_Distance.csv", to.name = "Pharmacy_L", name.string = "Pharm", missing.values = c(" ", "","mail order"))
final.merge <- lab.distances[c(2,6,7)]
final.merge <- merge(final.merge,pcp.distances[c(2,6,7)],by = index.string.all,all = T)
final.merge <- merge(final.merge,ids.distances[c(2,6,7)],by = index.string.all,all = T)
final.merge <- merge(final.merge,pharm.distances[c(2,6,7)],by = index.string.all,all = T)
output.merge <- merge(barber.data,final.merge,by = index.string.all, all = T)
write.csv(output.merge,"Barber_All_Distances.csv")
if (FALSE){
write.csv(unique((barber.data[,c("IDS","IDS_Locati")])),"01_IDS_List.csv", row.names = F)
write.csv(unique((barber.data[,c("Lab","Lab_Locati")])),"02_Lab_List.csv", row.names = F)
write.csv(unique((barber.data[,c("PCP","PCP_Locati")])),"03_PCP_List.csv", row.names = F)
}