library(dplyr)
library(readxl)
library(stringr)
library(tidyr)
library(data.table)
library(knitr)
stops <- read_excel("ignore/RP-2014-2015-Data-3-9-16.xlsx", sheet=1)
names(stops)[names(stops) == 'Department Name'] <- 'DepartmentName'


stops$ethnicity <- ifelse(((stops$SubjectRaceCode ==  "W") & (stops$SubjectEthnicityCode =="N")), "White", "Minority")
stops$RE <- paste0(stops$SubjectRaceCode, stops$SubjectEthnicityCode)
stops$RE <- gsub("AH", "Hispanic", stops$RE)
stops$RE <- gsub("AM", "Middle-eastern", stops$RE)
stops$RE <- gsub("AN", "Asian", stops$RE)
stops$RE <- gsub("BH", "Black", stops$RE)
stops$RE <- gsub("BM", "Black", stops$RE)
stops$RE <- gsub("BN", "Black", stops$RE)
stops$RE <- gsub("IH", "Indian", stops$RE)
stops$RE <- gsub("IM", "Middle-eastern", stops$RE)
stops$RE <- gsub("IN", "Indian", stops$RE)
stops$RE <- gsub("WH", "Hispanic", stops$RE)
stops$RE <- gsub("WM", "Middle-eastern", stops$RE)
stops$RE <- gsub("WN", "White", stops$RE)

# Adjusting for state police troops

stops$DepartmentName <- ifelse(stops$OrganizationIdentificationID=="CTCSP0000", "State Police: Headquarters", stops$DepartmentName)
stops$DepartmentName <- ifelse(stops$OrganizationIdentificationID=="CTCSP0023", "State Police: Headquarters", stops$DepartmentName)
stops$DepartmentName <- ifelse(stops$OrganizationIdentificationID=="CTCSP0029", "State Police: Headquarters", stops$DepartmentName)
stops$DepartmentName <- ifelse(stops$OrganizationIdentificationID=="CTCSP1900", "State Police: Headquarters", stops$DepartmentName)
stops$DepartmentName <- ifelse(stops$OrganizationIdentificationID=="CTCSP2900", "State Police: Headquarters", stops$DepartmentName)
stops$DepartmentName <- ifelse(stops$OrganizationIdentificationID=="CTCSP3800", "State Police: Headquarters", stops$DepartmentName)
stops$DepartmentName <- ifelse(stops$OrganizationIdentificationID=="CTCSP0200", "State Police: Troop A", stops$DepartmentName)
stops$DepartmentName <- ifelse(stops$OrganizationIdentificationID=="CTCSP0300", "State Police: Troop B", stops$DepartmentName)
stops$DepartmentName <- ifelse(stops$OrganizationIdentificationID=="CTCSP0400", "State Police: Troop C", stops$DepartmentName)
stops$DepartmentName <- ifelse(stops$OrganizationIdentificationID=="CTCSP0500", "State Police: Troop D", stops$DepartmentName)
stops$DepartmentName <- ifelse(stops$OrganizationIdentificationID=="CTCSP0600", "State Police: Troop E", stops$DepartmentName)
stops$DepartmentName <- ifelse(stops$OrganizationIdentificationID=="CTCSP0700", "State Police: Troop F", stops$DepartmentName)
stops$DepartmentName <- ifelse(stops$OrganizationIdentificationID=="CTCSP0800", "State Police: Troop G", stops$DepartmentName)
stops$DepartmentName <- ifelse(stops$OrganizationIdentificationID=="CTCSP0900", "State Police: Troop H", stops$DepartmentName)
stops$DepartmentName <- ifelse(stops$OrganizationIdentificationID=="CTCSP1000", "State Police: Troop I", stops$DepartmentName)
stops$DepartmentName <- ifelse(stops$OrganizationIdentificationID=="CTCSP1100", "State Police: Troop J", stops$DepartmentName)
stops$DepartmentName <- ifelse(stops$OrganizationIdentificationID=="CTCSP1200", "State Police: Troop K", stops$DepartmentName)

officer_departments <- stops %>%
  dplyr::select(DepartmentName, ReportingOfficerIdentificationID) %>%
  unique()

officer_departments$ReportingOfficerIdentificationID <- paste0(officer_departments$DepartmentName, "--", officer_departments$ReportingOfficerIdentificationID)
stops$ReportingOfficerIdentificationID <- paste0(stops$DepartmentName, "--", stops$ReportingOfficerIdentificationID)

stops$VehicleSearchedIndicator <- gsub("0", "No", as.character(stops$VehicleSearchedIndicator))
stops$VehicleSearchedIndicator <- gsub("1", "Yes", as.character(stops$VehicleSearchedIndicator))

stops$ContrabandIndicator <- gsub("0", "No", as.character(stops$ContrabandIndicator))
stops$ContrabandIndicator <- gsub("1", "Yes", as.character(stops$ContrabandIndicator))

stops$CustodialArrestIndicator <- gsub("0", "No", as.character(stops$CustodialArrestIndicator))
stops$CustodialArrestIndicator <- gsub("1", "Yes", as.character(stops$CustodialArrestIndicator))

What’s the overall rate for searches from traffic stops?

What’s the overall contraband discovery rate from those searches?

state_search <- stops %>%
  group_by(VehicleSearchedIndicator) %>%
  summarise(total=n()) %>%
  spread(VehicleSearchedIndicator, total) %>%
  mutate(not_searched_p = round(No/(No+Yes)*100,2), searched_p = round(Yes/(No+Yes)*100,2) )

names(state_search)[names(state_search) == 'No'] <- 'not_searched'
names(state_search)[names(state_search) == 'Yes'] <- 'searched'
state_search$RE <- "State average"
state_search <- state_search[c("RE", "searched", "not_searched", "searched_p", "not_searched_p")]  
  
state_search_race <- stops %>%
  group_by(RE, VehicleSearchedIndicator) %>%
  summarise(total=n()) %>%
  spread(VehicleSearchedIndicator, total) %>%
  mutate(not_searched_p = round(No/(No+Yes)*100,2), searched_p = round(Yes/(No+Yes)*100,2) )


names(state_search_race)[names(state_search_race) == 'No'] <- 'not_searched'
names(state_search_race)[names(state_search_race) == 'Yes'] <- 'searched'

searches_all <- rbind(state_search, state_search_race)

names(searches_all)[names(searches_all) == 'RE'] <- 'Category'
kable(searches_all)
Category searched not_searched searched_p not_searched_p
State average 17079 569770 2.91 97.09
Asian 111 10862 1.01 98.99
Black 4373 80972 5.12 94.88
Hispanic 3465 66675 4.94 95.06
Indian 42 4154 1.00 99.00
Middle-eastern 230 11250 2.00 98.00
White 8858 395857 2.19 97.81

Contraband found out of all stops

state_contra <- stops %>%
  group_by(ContrabandIndicator) %>%
  summarise(total=n()) %>%
  spread(ContrabandIndicator, total) %>%
  mutate(no_contra_p = round(No/(No+Yes)*100,2), contra_p = round(Yes/(No+Yes)*100,2) )

names(state_contra)[names(state_contra) == 'No'] <- 'no_contra'
names(state_contra)[names(state_contra) == 'Yes'] <- 'contra'
state_contra$RE <- "State average"
state_contra <- state_contra[c("RE", "contra", "no_contra", "contra_p", "no_contra_p")]  
  
state_contra_race <- stops %>%
  group_by(RE, ContrabandIndicator) %>%
  summarise(total=n()) %>%
  spread(ContrabandIndicator, total) %>%
  mutate(no_contra_p = round(No/(No+Yes)*100,2), contra_p = round(Yes/(No+Yes)*100,2) )


names(state_contra_race)[names(state_contra_race) == 'No'] <- 'no_contra'
names(state_contra_race)[names(state_contra_race) == 'Yes'] <- 'contra'

contra_all <- rbind(state_contra, state_contra_race)

names(contra_all)[names(contra_all) == 'RE'] <- 'Category'
kable(contra_all)
Category contra no_contra contra_p no_contra_p
State average 6408 580441 1.09 98.91
Asian 34 10939 0.31 99.69
Black 1480 83865 1.73 98.27
Hispanic 1133 69007 1.62 98.38
Indian 14 4182 0.33 99.67
Middle-eastern 63 11417 0.55 99.45
White 3684 401031 0.91 99.09

Contraband found out out of those searched

state_contra2 <- stops %>%
  filter(VehicleSearchedIndicator=="Yes") %>%
  group_by(ContrabandIndicator) %>%
  summarise(total=n()) %>%
  spread(ContrabandIndicator, total) %>%
  mutate(no_contra_p = round(No/(No+Yes)*100,2), contra_p = round(Yes/(No+Yes)*100,2) )

names(state_contra2)[names(state_contra2) == 'No'] <- 'no_contra'
names(state_contra2)[names(state_contra2) == 'Yes'] <- 'contra'
state_contra2$RE <- "State average"
state_contra2 <- state_contra2[c("RE", "contra", "no_contra", "contra_p", "no_contra_p")]  
  
state_contra_race2 <- stops %>%
  filter(VehicleSearchedIndicator=="Yes") %>%
  group_by(RE, ContrabandIndicator) %>%
  summarise(total=n()) %>%
  spread(ContrabandIndicator, total) %>%
  mutate(no_contra_p = round(No/(No+Yes)*100,2), contra_p = round(Yes/(No+Yes)*100,2) )


names(state_contra_race2)[names(state_contra_race2) == 'No'] <- 'no_contra'
names(state_contra_race2)[names(state_contra_race2) == 'Yes'] <- 'contra'

contra_all2 <- rbind(state_contra2, state_contra_race2)

names(contra_all2)[names(contra_all2) == 'RE'] <- 'Category'

colnames(contra_all2) <- c("Category", "contra_only", "no_contra_only", "contra_p_only", "no_contra_p_only")

mega_contra <- left_join(contra_all, contra_all2)
## Joining by: "Category"
kable(mega_contra)
Category contra no_contra contra_p no_contra_p contra_only no_contra_only contra_p_only no_contra_p_only
State average 6408 580441 1.09 98.91 5768 11311 33.77 66.23
Asian 34 10939 0.31 99.69 27 84 24.32 75.68
Black 1480 83865 1.73 98.27 1294 3079 29.59 70.41
Hispanic 1133 69007 1.62 98.38 967 2498 27.91 72.09
Indian 14 4182 0.33 99.67 14 28 33.33 66.67
Middle-eastern 63 11417 0.55 99.45 55 175 23.91 76.09
White 3684 401031 0.91 99.09 3411 5447 38.51 61.49
# Arrests out of all stops

state_arrests <- stops %>%
  group_by(CustodialArrestIndicator) %>%
  summarise(total=n()) %>%
  spread(CustodialArrestIndicator, total) %>%
  mutate(no_arrests_p = round(No/(No+Yes)*100,2), arrests_p = round(Yes/(No+Yes)*100,2) )

names(state_arrests)[names(state_arrests) == 'No'] <- 'no_arrests'
names(state_arrests)[names(state_arrests) == 'Yes'] <- 'arrests'
state_arrests$RE <- "State average"
state_arrests <- state_arrests[c("RE", "arrests", "no_arrests", "arrests_p", "no_arrests_p")]  
  
state_arrests_race <- stops %>%
  group_by(RE, CustodialArrestIndicator) %>%
  summarise(total=n()) %>%
  spread(CustodialArrestIndicator, total) %>%
  mutate(no_arrests_p = round(No/(No+Yes)*100,2), arrests_p = round(Yes/(No+Yes)*100,2) )


names(state_arrests_race)[names(state_arrests_race) == 'No'] <- 'no_arrests'
names(state_arrests_race)[names(state_arrests_race) == 'Yes'] <- 'arrests'

arrests_all <- rbind(state_arrests, state_arrests_race)

names(arrests_all)[names(arrests_all) == 'RE'] <- 'Category'
kable(arrests_all)
Category arrests no_arrests arrests_p no_arrests_p
State average 10764 576085 1.83 98.17
Asian 86 10887 0.78 99.22
Black 1939 83406 2.27 97.73
Hispanic 2075 68065 2.96 97.04
Indian 47 4149 1.12 98.88
Middle-eastern 162 11318 1.41 98.59
White 6455 398260 1.59 98.41

Arrests out of those searched

state_arrests2 <- stops %>%
  filter(VehicleSearchedIndicator=="Yes") %>%
  group_by(CustodialArrestIndicator) %>%
  summarise(total=n()) %>%
  spread(CustodialArrestIndicator, total) %>%
  mutate(no_arrests_p = round(No/(No+Yes)*100,2), arrests_p = round(Yes/(No+Yes)*100,2) )

names(state_arrests2)[names(state_arrests2) == 'No'] <- 'no_arrests'
names(state_arrests2)[names(state_arrests2) == 'Yes'] <- 'arrests'
state_arrests2$RE <- "State average"
state_arrests2 <- state_arrests2[c("RE", "arrests", "no_arrests", "arrests_p", "no_arrests_p")]  
  
state_arrests_race2 <- stops %>%
  filter(VehicleSearchedIndicator=="Yes") %>%
  group_by(RE, CustodialArrestIndicator) %>%
  summarise(total=n()) %>%
  spread(CustodialArrestIndicator, total) %>%
  mutate(no_arrests_p = round(No/(No+Yes)*100,2), arrests_p = round(Yes/(No+Yes)*100,2) )


names(state_arrests_race2)[names(state_arrests_race2) == 'No'] <- 'no_arrests'
names(state_arrests_race2)[names(state_arrests_race2) == 'Yes'] <- 'arrests'

arrests_all2 <- rbind(state_arrests2, state_arrests_race2)

names(arrests_all2)[names(contra_all2) == 'RE'] <- 'Category'

colnames(arrests_all2) <- c("Category", "arrests_only", "no_arrests_only", "arrests_p_only", "no_arrests_p_only")

mega_arrests <- left_join(arrests_all, arrests_all2)
## Joining by: "Category"
sca_state <- left_join(searches_all, mega_contra)
## Joining by: "Category"
sca_state <- left_join(sca_state , mega_arrests)
## Joining by: "Category"
sca_table <- sca_state[c("Category", "searched_p", "contra_p_only", "arrests_p_only")]
colnames(sca_table) <- c("Category", "searched", "contrabound found", "arrested")
kable(sca_table)
Category searched contrabound found arrested
State average 2.91 33.77 26.19
Asian 1.01 24.32 27.03
Black 5.12 29.59 21.68
Hispanic 4.94 27.91 24.76
Indian 1.00 33.33 28.57
Middle-eastern 2.00 23.91 20.43
White 2.19 38.51 29.10

What’s the overall rate for searches from traffic stops by town?

What’s the overall contraband discovery rate from those searches by town?

town_search <- stops %>%
  group_by(DepartmentName, VehicleSearchedIndicator) %>%
  summarise(total=n()) %>%
  spread(VehicleSearchedIndicator, total) %>%
  mutate(not_searched_p = round(No/(No+Yes)*100,2), searched_p = round(Yes/(No+Yes)*100,2) )


names(town_search)[names(town_search) == 'No'] <- 'not_searched'
names(town_search)[names(town_search) == 'Yes'] <- 'searched'
town_search$RE <- "State average"
town_search <- town_search[c("RE", "searched", "not_searched", "searched_p", "not_searched_p")]  
  
town_search_race <- stops %>%
  group_by(DepartmentName, RE, VehicleSearchedIndicator) %>%
  summarise(total=n()) %>%
  spread(VehicleSearchedIndicator, total) %>%
  mutate(not_searched_p = round(No/(No+Yes)*100,2), searched_p = round(Yes/(No+Yes)*100,2) ) %>%
  dplyr::select(DepartmentName, RE, searched_p) %>%
  spread(RE, searched_p)

colnames(town_search_race) <- c("DepartmentName", "asian_s", "black_s", "hispanic_s", "indian_s", "middle_eastern_s", "white_s")

Contraband found?

town_contra <- stops %>%
  filter(VehicleSearchedIndicator=="Yes") %>%
  group_by(DepartmentName) %>%
  summarise(searches=n())

town_contra_race2 <- stops %>%
  filter(VehicleSearchedIndicator=="Yes") %>%
  group_by(DepartmentName, RE, ContrabandIndicator) %>%
  summarise(total=n()) %>%
  spread(ContrabandIndicator, total) %>%
  mutate(no_contra_p = round(No/(No+Yes)*100,2), contra_p = round(Yes/(No+Yes)*100,2) ) %>%
  dplyr::select(DepartmentName, RE, contra_p) %>%
  spread(RE, contra_p)

colnames(town_contra_race2) <- c("DepartmentName", "asian_c", "black_c", "hispanic_c", "indian_c", "middle_eastern_c", "white_c")

town_all <- left_join(town_contra, town_search_race)
## Joining by: "DepartmentName"
town_all <- left_join(town_all, town_contra_race2)
## Joining by: "DepartmentName"
kable(town_all)
DepartmentName searches asian_s black_s hispanic_s indian_s middle_eastern_s white_s asian_c black_c hispanic_c indian_c middle_eastern_c white_c
Ansonia 151 NA 3.40 NA NA 5.41 2.37 NA 14.81 18.18 NA 23.91 12.50
Avon 10 2.22 1.71 NA NA NA 0.60 NA 50.00 NA NA NA NA
Berlin 145 3.90 4.82 5.21 NA 3.88 1.64 NA 10.34 17.95 NA NA 39.13
Bethel 22 NA 1.03 1.31 NA NA 0.58 NA NA 20.00 NA NA 86.67
Bloomfield 150 NA 4.02 3.68 NA NA 1.33 NA 41.44 53.85 NA NA 50.00
Branford 97 NA 4.10 3.78 NA NA 1.66 NA 18.18 15.38 NA NA 20.55
Bridgeport 476 NA 12.35 10.03 NA 3.53 3.64 NA 12.35 7.79 NA NA 14.71
Bristol 117 13.33 3.94 3.29 6.25 NA 1.26 NA 31.82 60.00 NA NA 54.10
Brookfield 31 NA 7.29 1.32 2.94 NA 1.21 NA 42.86 50.00 NA NA 80.95
Canton 24 NA 3.92 NA NA NA 1.55 NA NA NA NA NA 45.45
CAPITOL POLICE 3 NA 3.17 2.04 NA NA NA NA NA NA NA NA NA
CCSU 8 1.61 NA 1.29 NA NA 0.11 NA NA NA NA NA NA
Cheshire 78 NA 3.60 3.75 NA NA 1.00 NA 40.00 27.27 NA NA 55.32
Clinton 134 NA 7.22 4.29 NA NA 4.67 NA 71.43 22.22 NA NA 54.24
Coventry 26 NA 5.17 1.64 NA NA 1.45 NA 33.33 NA NA NA 36.36
Cromwell 21 5.26 1.48 NA NA 3.77 0.93 NA 25.00 NA NA NA 57.14
Danbury 390 2.80 7.40 12.02 4.35 12.50 5.62 NA 15.15 3.73 NA NA 3.16
Darien 62 NA 4.59 3.76 NA NA 1.85 NA 42.86 33.33 NA NA 45.45
Derby 261 NA 11.26 15.29 NA 3.70 8.04 NA 2.00 5.77 NA NA 5.70
DMV 6 NA 0.24 NA NA NA 0.31 NA NA NA NA NA NA
East Hampton 29 NA 13.64 25.00 NA NA 5.54 NA NA NA NA NA 65.22
East Hartford 379 0.89 5.46 4.49 NA 1.16 3.57 NA 50.28 42.86 NA NA 50.00
East Haven 97 NA 5.06 4.17 NA 3.57 2.68 NA 8.33 15.79 NA NA 20.00
East Windsor 17 NA 1.97 NA NA NA 1.73 NA 33.33 NA NA NA 21.43
Easton 4 NA NA 2.17 NA NA 0.60 NA NA NA NA NA NA
Enfield 160 NA 4.81 4.46 NA 2.74 2.40 NA 37.04 27.78 NA 50.00 27.43
Fairfield 205 2.91 3.92 3.64 NA 1.00 2.13 33.33 51.06 57.14 NA NA 50.00
Farmington 143 3.16 3.51 4.77 7.41 0.81 2.64 40.00 26.67 36.84 NA NA 43.43
Glastonbury 331 2.70 8.60 10.25 NA 4.35 7.43 50.00 34.38 24.32 NA NA 31.37
Granby 10 NA NA 7.69 NA NA 0.85 NA NA NA NA NA 62.50
Greenwich 92 NA 2.66 2.70 2.17 0.52 0.94 NA 26.67 11.43 NA 22.22 15.62
Groton City 33 2.90 2.72 4.33 NA NA 0.70 NA 66.67 16.67 NA NA NA
Groton Town 83 NA 1.94 2.54 NA NA 1.26 NA 50.00 25.00 NA NA 54.39
Guilford 24 NA NA 2.59 NA NA 0.79 NA NA 33.33 NA NA 38.10
Hamden 60 NA 2.23 1.70 NA 0.30 0.74 NA 17.14 NA NA 50.00 NA
Hartford 61 NA 1.47 1.21 7.14 NA 0.45 NA 23.53 17.65 NA NA 44.44
Madison 35 NA NA 1.89 NA 1.24 0.86 NA NA NA NA 12.50 58.33
Manchester 129 NA 4.52 4.19 NA 1.56 1.33 NA 44.64 35.48 NA NA 46.34
Meriden 174 8.33 9.95 6.59 NA 2.27 5.33 NA 30.23 28.33 NA NA 28.99
Middlebury 2 NA NA 9.09 NA NA 0.65 NA NA NA NA NA NA
Middletown 234 3.12 11.01 6.27 NA NA 6.40 NA 56.94 52.63 NA NA 50.00
Milford 267 2.08 16.59 12.00 6.67 7.69 6.69 NA 32.35 22.22 NA NA 41.88
Monroe 62 3.12 1.64 2.38 NA NA 0.94 NA 20.00 33.33 NA NA 51.06
Naugatuck 238 NA 6.15 6.13 NA 1.61 4.47 NA 29.03 34.38 NA NA 36.78
New Britain 320 1.33 5.35 4.41 NA 1.27 2.71 NA 37.65 34.25 NA 50.00 40.70
New Canaan 50 NA 2.11 1.75 NA 1.96 0.77 NA 71.43 55.56 NA NA 57.58
New Haven 794 1.45 9.02 6.17 1.92 3.03 3.06 NA 9.29 12.34 NA NA 13.77
New London 116 6.67 11.25 9.84 NA NA 5.88 NA 20.00 30.00 NA NA 28.00
New Milford 50 NA 4.97 1.39 NA 2.78 1.07 NA 44.44 NA NA NA 45.71
Newington 225 0.83 5.64 6.52 3.45 3.03 3.02 NA 17.02 24.00 NA 33.33 17.35
Newtown 96 0.65 1.62 2.15 NA 1.96 0.83 NA NA 23.08 NA NA 35.21
North Branford 19 NA 1.89 20.51 NA NA 1.12 NA NA 37.50 NA NA 90.00
North Haven 96 NA 9.95 12.98 NA 2.04 4.20 NA 13.64 23.53 NA NA 23.21
Norwalk 243 NA 9.58 6.07 NA 2.78 2.32 NA 27.62 24.24 NA 60.00 25.37
Norwich 361 1.48 8.53 8.65 6.25 NA 5.05 NA 33.00 30.99 NA NA 34.59
Old Saybrook 119 1.69 0.94 2.11 NA NA 3.75 NA NA 25.00 NA NA 60.18
Orange 72 NA 3.61 1.74 NA 2.48 0.96 NA 35.48 30.00 NA 33.33 25.00
Plainfield 30 NA 3.70 2.86 10.00 NA 1.61 NA NA NA NA NA 4.00
Plainville 227 NA 10.58 10.89 33.33 5.88 6.09 NA 34.48 48.72 NA 50.00 39.74
Plymouth 57 NA 7.14 3.92 NA 5.00 2.46 NA 14.29 25.00 NA NA 37.78
Portland 4 NA NA NA NA NA 2.35 NA NA NA NA NA 25.00
Putnam 15 NA NA 8.33 NA NA 1.41 NA NA NA NA NA 71.43
Redding 18 NA 1.28 1.26 NA NA 0.92 NA NA NA NA NA 6.67
Ridgefield 40 0.72 1.75 0.76 NA 4.55 0.41 NA 16.67 33.33 NA NA 23.08
Rocky Hill 83 1.35 3.61 3.75 NA 0.77 1.84 NA 40.00 27.27 NA NA 43.64
SCSU 13 NA 1.19 1.25 NA NA 1.43 NA 14.29 NA NA NA 60.00
Seymour 98 NA 5.37 7.94 NA NA 2.32 NA 7.69 NA NA NA 8.82
Shelton 14 NA NA 2.17 NA NA 2.74 NA NA NA NA NA 15.38
Simsbury 28 NA 2.42 0.90 NA NA 0.80 NA 25.00 NA NA NA 65.22
South Windsor 151 1.00 6.36 5.62 3.70 4.88 2.74 NA 48.84 33.33 NA NA 48.75
Southington 9 NA 1.12 0.77 NA 3.33 0.13 NA NA NA NA NA 40.00
Stamford 194 1.09 4.02 5.38 2.99 NA 2.29 NA 13.51 24.62 NA NA 25.00
State Police: Headquarters 162 0.26 1.69 1.73 1.78 2.47 0.79 NA 30.23 20.00 33.33 25.00 43.21
State Police: Troop A 520 1.05 6.10 4.06 1.97 0.39 1.85 NA 34.25 34.21 75.00 NA 36.51
State Police: Troop B 119 NA 1.68 3.07 NA 1.30 1.37 NA 33.33 53.85 NA NA 44.44
State Police: Troop C 638 0.78 4.26 4.49 0.76 0.93 2.16 12.50 45.36 25.97 50.00 16.67 51.35
State Police: Troop D 327 0.80 4.30 3.72 1.12 2.51 1.68 33.33 38.89 42.42 NA 20.00 51.64
State Police: Troop E 404 NA 4.08 1.85 0.46 1.12 1.65 NA 33.66 24.14 NA 66.67 35.56
State Police: Troop F 209 0.15 1.54 1.42 0.51 0.51 0.72 NA 37.84 39.29 NA NA 56.74
State Police: Troop G 386 0.72 2.50 1.63 0.22 1.46 1.13 60.00 25.50 24.32 NA 33.33 28.57
State Police: Troop H 461 0.63 4.17 4.07 0.24 2.33 1.35 66.67 34.22 29.57 NA 20.00 32.00
State Police: Troop I 152 0.35 1.83 2.44 0.63 0.75 0.71 NA 23.91 38.10 NA NA 27.87
State Police: Troop J 319 0.93 3.75 4.04 NA 0.94 1.27 NA 32.79 36.51 NA NA 40.00
State Police: Troop K 283 NA 5.12 4.97 NA 4.56 2.05 NA 40.00 52.38 NA 36.36 46.67
Stonington 19 NA 0.91 1.56 NA NA 0.67 NA NA NA NA NA 70.59
Stratford 297 8.11 11.80 11.57 NA 6.90 7.10 33.33 23.39 23.44 NA NA 25.00
Suffield 28 NA 3.45 4.00 NA 4.55 2.03 NA 50.00 50.00 NA NA 30.43
Thomaston 24 NA 6.25 6.67 NA 50.00 3.09 NA NA 50.00 NA NA 30.00
Torrington 78 NA 3.68 3.45 NA NA 1.17 NA 27.27 7.69 NA NA 40.74
Trumbull 72 NA 3.23 1.62 NA 4.55 2.52 NA 36.84 42.86 NA NA 40.91
UCONN 80 2.13 2.40 7.24 NA 2.96 3.10 NA 50.00 45.45 NA 50.00 44.44
Vernon 293 NA 9.54 12.58 NA 6.67 7.42 NA 50.00 51.22 NA NA 52.02
Wallingford 705 3.82 10.01 13.19 NA 6.77 5.79 40.00 46.07 36.54 NA 33.33 44.39
Waterbury 436 12.50 26.85 22.54 NA NA 10.19 NA 30.81 16.20 NA NA 38.89
Waterford 185 5.26 5.01 5.81 NA NA 3.60 NA 48.28 31.03 NA NA 45.53
Watertown 24 NA 11.01 5.41 NA NA 0.75 NA 33.33 25.00 NA NA NA
West Hartford 676 1.15 7.15 10.31 1.74 11.90 7.76 33.33 48.94 59.87 66.67 NA 68.36
West Haven 216 NA 4.44 5.12 NA 6.86 2.65 NA 8.96 14.29 NA NA 20.25
Weston 3 NA 3.12 NA NA NA 0.65 NA NA NA NA NA 50.00
Westport 212 4.40 10.23 6.79 NA 4.08 2.73 25.00 32.26 43.33 NA NA 48.25
Wethersfield 253 3.12 7.58 5.62 9.09 NA 5.04 NA 35.94 25.00 NA NA 30.51
Willimantic 124 3.23 9.55 4.73 NA 2.44 2.97 NA 23.81 26.32 NA 50.00 40.00
Wilton 413 3.45 12.83 16.86 1.45 13.64 7.02 33.33 18.87 5.88 NA NA 6.37
Windsor 85 NA 1.70 2.58 10.00 1.01 1.05 NA 32.56 23.08 NA NA 26.92
Windsor Locks 92 NA 3.90 5.45 NA 4.29 4.05 NA 7.69 NA NA 33.33 19.40
Winsted 17 NA 11.54 NA NA 25.00 2.61 NA 66.67 NA NA NA 76.92
Wolcott 24 NA 6.90 11.11 NA NA 6.15 NA NA NA NA NA 15.79
Woodbridge 23 NA 4.69 0.74 NA NA 0.39 NA 22.22 NA NA NA 50.00
Yale 97 2.56 12.47 22.45 NA 5.26 2.72 NA 44.90 51.52 NA NA 53.85

Arrested?

town_arrests_race2 <- stops %>%
  filter(VehicleSearchedIndicator=="Yes") %>%
  group_by(DepartmentName, RE, CustodialArrestIndicator) %>%
  summarise(total=n()) %>%
  spread(CustodialArrestIndicator, total) %>%
  mutate(no_contra_p = round(No/(No+Yes)*100,2), contra_p = round(Yes/(No+Yes)*100,2) ) %>%
  dplyr::select(DepartmentName, RE, contra_p) %>%
  spread(RE, contra_p)

colnames(town_arrests_race2) <- c("DepartmentName", "asian_a", "black_a", "hispanic_a", "indian_a", "middle_eastern_a", "white_a")

town_all <- left_join(town_all, town_arrests_race2)
## Joining by: "DepartmentName"
kable(town_all)
DepartmentName searches asian_s black_s hispanic_s indian_s middle_eastern_s white_s asian_c black_c hispanic_c indian_c middle_eastern_c white_c asian_a black_a hispanic_a indian_a middle_eastern_a white_a
Ansonia 151 NA 3.40 NA NA 5.41 2.37 NA 14.81 18.18 NA 23.91 12.50 NA 18.52 18.18 NA 15.22 14.29
Avon 10 2.22 1.71 NA NA NA 0.60 NA 50.00 NA NA NA NA NA NA NA NA NA NA
Berlin 145 3.90 4.82 5.21 NA 3.88 1.64 NA 10.34 17.95 NA NA 39.13 NA 20.69 10.26 NA 20.00 33.33
Bethel 22 NA 1.03 1.31 NA NA 0.58 NA NA 20.00 NA NA 86.67 NA 50.00 40.00 NA NA 13.33
Bloomfield 150 NA 4.02 3.68 NA NA 1.33 NA 41.44 53.85 NA NA 50.00 NA 20.72 7.69 NA NA 30.77
Branford 97 NA 4.10 3.78 NA NA 1.66 NA 18.18 15.38 NA NA 20.55 NA 9.09 NA NA NA 28.77
Bridgeport 476 NA 12.35 10.03 NA 3.53 3.64 NA 12.35 7.79 NA NA 14.71 NA 14.74 10.39 NA NA 19.12
Bristol 117 13.33 3.94 3.29 6.25 NA 1.26 NA 31.82 60.00 NA NA 54.10 12.50 13.64 28.00 NA NA 22.95
Brookfield 31 NA 7.29 1.32 2.94 NA 1.21 NA 42.86 50.00 NA NA 80.95 NA 14.29 NA NA NA 4.76
Canton 24 NA 3.92 NA NA NA 1.55 NA NA NA NA NA 45.45 NA NA NA NA NA 50.00
CAPITOL POLICE 3 NA 3.17 2.04 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
CCSU 8 1.61 NA 1.29 NA NA 0.11 NA NA NA NA NA NA NA NA NA NA NA NA
Cheshire 78 NA 3.60 3.75 NA NA 1.00 NA 40.00 27.27 NA NA 55.32 NA 5.00 18.18 NA NA 19.15
Clinton 134 NA 7.22 4.29 NA NA 4.67 NA 71.43 22.22 NA NA 54.24 NA 14.29 44.44 NA NA 52.54
Coventry 26 NA 5.17 1.64 NA NA 1.45 NA 33.33 NA NA NA 36.36 NA 33.33 NA NA NA 40.91
Cromwell 21 5.26 1.48 NA NA 3.77 0.93 NA 25.00 NA NA NA 57.14 NA NA NA NA NA 35.71
Danbury 390 2.80 7.40 12.02 4.35 12.50 5.62 NA 15.15 3.73 NA NA 3.16 NA 15.15 14.29 NA NA 11.58
Darien 62 NA 4.59 3.76 NA NA 1.85 NA 42.86 33.33 NA NA 45.45 NA 28.57 26.67 NA NA 30.30
Derby 261 NA 11.26 15.29 NA 3.70 8.04 NA 2.00 5.77 NA NA 5.70 NA 4.00 11.54 NA NA 13.92
DMV 6 NA 0.24 NA NA NA 0.31 NA NA NA NA NA NA NA NA NA NA NA 20.00
East Hampton 29 NA 13.64 25.00 NA NA 5.54 NA NA NA NA NA 65.22 NA NA 66.67 NA NA 52.17
East Hartford 379 0.89 5.46 4.49 NA 1.16 3.57 NA 50.28 42.86 NA NA 50.00 NA 22.03 23.47 NA NA 27.45
East Haven 97 NA 5.06 4.17 NA 3.57 2.68 NA 8.33 15.79 NA NA 20.00 NA 25.00 36.84 NA NA 23.08
East Windsor 17 NA 1.97 NA NA NA 1.73 NA 33.33 NA NA NA 21.43 NA 33.33 NA NA NA 14.29
Easton 4 NA NA 2.17 NA NA 0.60 NA NA NA NA NA NA NA NA NA NA NA NA
Enfield 160 NA 4.81 4.46 NA 2.74 2.40 NA 37.04 27.78 NA 50.00 27.43 NA NA 11.11 NA NA 15.93
Fairfield 205 2.91 3.92 3.64 NA 1.00 2.13 33.33 51.06 57.14 NA NA 50.00 66.67 17.02 23.81 NA NA 33.04
Farmington 143 3.16 3.51 4.77 7.41 0.81 2.64 40.00 26.67 36.84 NA NA 43.43 80.00 13.33 31.58 75.00 NA 48.48
Glastonbury 331 2.70 8.60 10.25 NA 4.35 7.43 50.00 34.38 24.32 NA NA 31.37 NA 15.62 21.62 NA 33.33 23.53
Granby 10 NA NA 7.69 NA NA 0.85 NA NA NA NA NA 62.50 NA NA NA NA NA 37.50
Greenwich 92 NA 2.66 2.70 2.17 0.52 0.94 NA 26.67 11.43 NA 22.22 15.62 NA 33.33 34.29 NA 22.22 18.75
Groton City 33 2.90 2.72 4.33 NA NA 0.70 NA 66.67 16.67 NA NA NA NA 66.67 16.67 NA NA 10.00
Groton Town 83 NA 1.94 2.54 NA NA 1.26 NA 50.00 25.00 NA NA 54.39 NA 14.29 16.67 NA NA 15.79
Guilford 24 NA NA 2.59 NA NA 0.79 NA NA 33.33 NA NA 38.10 NA NA 66.67 NA NA 61.90
Hamden 60 NA 2.23 1.70 NA 0.30 0.74 NA 17.14 NA NA 50.00 NA NA 14.29 NA NA NA 18.75
Hartford 61 NA 1.47 1.21 7.14 NA 0.45 NA 23.53 17.65 NA NA 44.44 NA 17.65 41.18 NA NA 55.56
Madison 35 NA NA 1.89 NA 1.24 0.86 NA NA NA NA 12.50 58.33 NA NA 33.33 NA 37.50 37.50
Manchester 129 NA 4.52 4.19 NA 1.56 1.33 NA 44.64 35.48 NA NA 46.34 NA 16.07 29.03 NA NA 26.83
Meriden 174 8.33 9.95 6.59 NA 2.27 5.33 NA 30.23 28.33 NA NA 28.99 NA 23.26 30.00 NA NA 31.88
Middlebury 2 NA NA 9.09 NA NA 0.65 NA NA NA NA NA NA NA NA NA NA NA NA
Middletown 234 3.12 11.01 6.27 NA NA 6.40 NA 56.94 52.63 NA NA 50.00 NA 8.33 10.53 NA NA 14.08
Milford 267 2.08 16.59 12.00 6.67 7.69 6.69 NA 32.35 22.22 NA NA 41.88 NA 51.47 55.56 NA NA 42.50
Monroe 62 3.12 1.64 2.38 NA NA 0.94 NA 20.00 33.33 NA NA 51.06 NA 40.00 33.33 NA NA 14.89
Naugatuck 238 NA 6.15 6.13 NA 1.61 4.47 NA 29.03 34.38 NA NA 36.78 NA 29.03 21.88 NA NA 34.48
New Britain 320 1.33 5.35 4.41 NA 1.27 2.71 NA 37.65 34.25 NA 50.00 40.70 NA 28.24 26.03 NA NA 27.91
New Canaan 50 NA 2.11 1.75 NA 1.96 0.77 NA 71.43 55.56 NA NA 57.58 NA NA 44.44 NA NA 3.03
New Haven 794 1.45 9.02 6.17 1.92 3.03 3.06 NA 9.29 12.34 NA NA 13.77 NA 10.51 13.64 NA NA 15.94
New London 116 6.67 11.25 9.84 NA NA 5.88 NA 20.00 30.00 NA NA 28.00 NA 48.57 43.33 NA NA 50.00
New Milford 50 NA 4.97 1.39 NA 2.78 1.07 NA 44.44 NA NA NA 45.71 NA 11.11 20.00 NA NA 11.43
Newington 225 0.83 5.64 6.52 3.45 3.03 3.02 NA 17.02 24.00 NA 33.33 17.35 NA 10.64 9.33 NA NA 17.35
Newtown 96 0.65 1.62 2.15 NA 1.96 0.83 NA NA 23.08 NA NA 35.21 NA 33.33 46.15 NA NA 38.03
North Branford 19 NA 1.89 20.51 NA NA 1.12 NA NA 37.50 NA NA 90.00 NA NA NA NA NA 30.00
North Haven 96 NA 9.95 12.98 NA 2.04 4.20 NA 13.64 23.53 NA NA 23.21 NA NA 17.65 NA NA 26.79
Norwalk 243 NA 9.58 6.07 NA 2.78 2.32 NA 27.62 24.24 NA 60.00 25.37 NA 20.00 28.79 NA 20.00 22.39
Norwich 361 1.48 8.53 8.65 6.25 NA 5.05 NA 33.00 30.99 NA NA 34.59 50.00 24.00 26.76 NA NA 28.11
Old Saybrook 119 1.69 0.94 2.11 NA NA 3.75 NA NA 25.00 NA NA 60.18 NA NA 75.00 NA NA 45.13
Orange 72 NA 3.61 1.74 NA 2.48 0.96 NA 35.48 30.00 NA 33.33 25.00 NA 38.71 30.00 NA NA 50.00
Plainfield 30 NA 3.70 2.86 10.00 NA 1.61 NA NA NA NA NA 4.00 NA 50.00 NA NA NA 8.00
Plainville 227 NA 10.58 10.89 33.33 5.88 6.09 NA 34.48 48.72 NA 50.00 39.74 NA 6.90 5.13 NA 50.00 5.77
Plymouth 57 NA 7.14 3.92 NA 5.00 2.46 NA 14.29 25.00 NA NA 37.78 NA NA 50.00 NA NA 37.78
Portland 4 NA NA NA NA NA 2.35 NA NA NA NA NA 25.00 NA NA NA NA NA NA
Putnam 15 NA NA 8.33 NA NA 1.41 NA NA NA NA NA 71.43 NA NA NA NA NA 57.14
Redding 18 NA 1.28 1.26 NA NA 0.92 NA NA NA NA NA 6.67 NA NA NA NA NA 46.67
Ridgefield 40 0.72 1.75 0.76 NA 4.55 0.41 NA 16.67 33.33 NA NA 23.08 NA NA 16.67 NA NA 19.23
Rocky Hill 83 1.35 3.61 3.75 NA 0.77 1.84 NA 40.00 27.27 NA NA 43.64 NA 13.33 NA NA NA 20.00
SCSU 13 NA 1.19 1.25 NA NA 1.43 NA 14.29 NA NA NA 60.00 NA 28.57 NA NA NA 20.00
Seymour 98 NA 5.37 7.94 NA NA 2.32 NA 7.69 NA NA NA 8.82 NA 30.77 NA NA NA 25.00
Shelton 14 NA NA 2.17 NA NA 2.74 NA NA NA NA NA 15.38 NA NA NA NA NA 15.38
Simsbury 28 NA 2.42 0.90 NA NA 0.80 NA 25.00 NA NA NA 65.22 NA 25.00 NA NA NA 30.43
South Windsor 151 1.00 6.36 5.62 3.70 4.88 2.74 NA 48.84 33.33 NA NA 48.75 NA 4.65 16.67 NA NA 3.75
Southington 9 NA 1.12 0.77 NA 3.33 0.13 NA NA NA NA NA 40.00 NA NA NA NA NA 20.00
Stamford 194 1.09 4.02 5.38 2.99 NA 2.29 NA 13.51 24.62 NA NA 25.00 NA 8.11 9.23 NA NA 9.09
State Police: Headquarters 162 0.26 1.69 1.73 1.78 2.47 0.79 NA 30.23 20.00 33.33 25.00 43.21 NA 18.60 26.67 NA 50.00 23.46
State Police: Troop A 520 1.05 6.10 4.06 1.97 0.39 1.85 NA 34.25 34.21 75.00 NA 36.51 66.67 28.08 22.81 25.00 NA 32.14
State Police: Troop B 119 NA 1.68 3.07 NA 1.30 1.37 NA 33.33 53.85 NA NA 44.44 NA 16.67 15.38 NA NA 18.18
State Police: Troop C 638 0.78 4.26 4.49 0.76 0.93 2.16 12.50 45.36 25.97 50.00 16.67 51.35 NA 10.31 7.79 50.00 NA 14.13
State Police: Troop D 327 0.80 4.30 3.72 1.12 2.51 1.68 33.33 38.89 42.42 NA 20.00 51.64 33.33 16.67 42.42 NA NA 24.18
State Police: Troop E 404 NA 4.08 1.85 0.46 1.12 1.65 NA 33.66 24.14 NA 66.67 35.56 NA 15.84 20.69 NA 66.67 21.11
State Police: Troop F 209 0.15 1.54 1.42 0.51 0.51 0.72 NA 37.84 39.29 NA NA 56.74 NA 27.03 32.14 NA NA 34.04
State Police: Troop G 386 0.72 2.50 1.63 0.22 1.46 1.13 60.00 25.50 24.32 NA 33.33 28.57 40.00 28.19 40.54 NA NA 42.86
State Police: Troop H 461 0.63 4.17 4.07 0.24 2.33 1.35 66.67 34.22 29.57 NA 20.00 32.00 33.33 32.09 36.52 NA 40.00 48.67
State Police: Troop I 152 0.35 1.83 2.44 0.63 0.75 0.71 NA 23.91 38.10 NA NA 27.87 NA 41.30 42.86 NA NA 47.54
State Police: Troop J 319 0.93 3.75 4.04 NA 0.94 1.27 NA 32.79 36.51 NA NA 40.00 NA 29.51 39.68 NA NA 38.95
State Police: Troop K 283 NA 5.12 4.97 NA 4.56 2.05 NA 40.00 52.38 NA 36.36 46.67 NA 17.14 14.29 NA 27.27 28.72
Stonington 19 NA 0.91 1.56 NA NA 0.67 NA NA NA NA NA 70.59 NA NA NA NA NA 11.76
Stratford 297 8.11 11.80 11.57 NA 6.90 7.10 33.33 23.39 23.44 NA NA 25.00 33.33 25.81 26.56 NA NA 33.65
Suffield 28 NA 3.45 4.00 NA 4.55 2.03 NA 50.00 50.00 NA NA 30.43 NA NA NA NA NA NA
Thomaston 24 NA 6.25 6.67 NA 50.00 3.09 NA NA 50.00 NA NA 30.00 NA NA NA NA NA 75.00
Torrington 78 NA 3.68 3.45 NA NA 1.17 NA 27.27 7.69 NA NA 40.74 NA 9.09 38.46 NA NA 31.48
Trumbull 72 NA 3.23 1.62 NA 4.55 2.52 NA 36.84 42.86 NA NA 40.91 NA 15.79 14.29 NA NA 25.00
UCONN 80 2.13 2.40 7.24 NA 2.96 3.10 NA 50.00 45.45 NA 50.00 44.44 33.33 16.67 27.27 NA 16.67 44.44
Vernon 293 NA 9.54 12.58 NA 6.67 7.42 NA 50.00 51.22 NA NA 52.02 NA 21.15 14.63 NA NA 28.79
Wallingford 705 3.82 10.01 13.19 NA 6.77 5.79 40.00 46.07 36.54 NA 33.33 44.39 60.00 58.43 64.10 NA 22.22 58.07
Waterbury 436 12.50 26.85 22.54 NA NA 10.19 NA 30.81 16.20 NA NA 38.89 NA 32.97 23.94 NA NA 43.52
Waterford 185 5.26 5.01 5.81 NA NA 3.60 NA 48.28 31.03 NA NA 45.53 25.00 34.48 27.59 NA NA 36.59
Watertown 24 NA 11.01 5.41 NA NA 0.75 NA 33.33 25.00 NA NA NA NA 25.00 NA NA NA 25.00
West Hartford 676 1.15 7.15 10.31 1.74 11.90 7.76 33.33 48.94 59.87 66.67 NA 68.36 66.67 27.66 25.66 33.33 NA 45.65
West Haven 216 NA 4.44 5.12 NA 6.86 2.65 NA 8.96 14.29 NA NA 20.25 NA 29.85 33.93 NA 42.86 31.65
Weston 3 NA 3.12 NA NA NA 0.65 NA NA NA NA NA 50.00 NA NA NA NA NA NA
Westport 212 4.40 10.23 6.79 NA 4.08 2.73 25.00 32.26 43.33 NA NA 48.25 25.00 24.19 23.33 NA NA 22.81
Wethersfield 253 3.12 7.58 5.62 9.09 NA 5.04 NA 35.94 25.00 NA NA 30.51 NA 21.88 33.82 NA NA 27.97
Willimantic 124 3.23 9.55 4.73 NA 2.44 2.97 NA 23.81 26.32 NA 50.00 40.00 NA 9.52 21.05 NA 25.00 23.33
Wilton 413 3.45 12.83 16.86 1.45 13.64 7.02 33.33 18.87 5.88 NA NA 6.37 33.33 16.98 9.80 NA NA 12.35
Windsor 85 NA 1.70 2.58 10.00 1.01 1.05 NA 32.56 23.08 NA NA 26.92 NA 16.28 30.77 NA NA 19.23
Windsor Locks 92 NA 3.90 5.45 NA 4.29 4.05 NA 7.69 NA NA 33.33 19.40 NA 7.69 11.11 NA 33.33 25.37
Winsted 17 NA 11.54 NA NA 25.00 2.61 NA 66.67 NA NA NA 76.92 NA NA NA NA NA 23.08
Wolcott 24 NA 6.90 11.11 NA NA 6.15 NA NA NA NA NA 15.79 NA NA NA NA NA 21.05
Woodbridge 23 NA 4.69 0.74 NA NA 0.39 NA 22.22 NA NA NA 50.00 NA 5.56 NA NA NA NA
Yale 97 2.56 12.47 22.45 NA 5.26 2.72 NA 44.90 51.52 NA NA 53.85 NA 40.82 24.24 NA NA 46.15