# This dataset looks at all types of hate crimes in NY counties by the type of hate crime from 2010 to 2016.
# My caveat: (Define why it is a flawed in notes)HateCrimes Tutorial HW
Hate Crimes Dataset - Based in NY from 2010 to 2016
Flawed hate crime data collection - We should now how the data was collected first
# We find out a key piece of information. There is a possible bias in the data, from where? Well the FBI relies on local authorities to 'collect' and 'submit' (manifest evvictim_catence) but there are state laws that can complicate this procedure, aka they may gravitate towards certain groupsSo now we know that there is possible bias in the dataset, what can we do with it?
library(tidyverse)── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr 1.1.2 ✔ readr 2.1.4
✔ forcats 1.0.0 ✔ stringr 1.5.0
✔ ggplot2 3.4.3 ✔ tibble 3.2.1
✔ lubridate 1.9.2 ✔ tidyr 1.3.0
✔ purrr 1.0.2
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag() masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(tinytex)
hatecrimes <- read_csv("hateCrimes2010.csv")Rows: 423 Columns: 44
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (2): County, Crime Type
dbl (42): Year, Anti-Male, Anti-Female, Anti-Transgender, Anti-Gender Identi...
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
Clean up the data:
Make all headers lowercase and remove spaces (Note to self: Is this always the case for most datasets? To rephrase the above, what I am referring to is this the first step?)
# Some interest from the structure of the data. Take a look from the 44 variables, more specifically take note at the min/max values. names(hatecrimes) <- tolower(names(hatecrimes))
names(hatecrimes) <- gsub("","",names(hatecrimes))
head(hatecrimes)# A tibble: 6 × 44
county year `crime type` `anti-male` `anti-female` `anti-transgender`
<chr> <dbl> <chr> <dbl> <dbl> <dbl>
1 Albany 2016 Crimes Against Pe… 0 0 0
2 Albany 2016 Property Crimes 0 0 0
3 Allegany 2016 Property Crimes 0 0 0
4 Bronx 2016 Crimes Against Pe… 0 0 4
5 Bronx 2016 Property Crimes 0 0 0
6 Broome 2016 Crimes Against Pe… 0 0 0
# ℹ 38 more variables: `anti-gender identity expression` <dbl>,
# `anti-age*` <dbl>, `anti-white` <dbl>, `anti-black` <dbl>,
# `anti-american indian/alaskan native` <dbl>, `anti-asian` <dbl>,
# `anti-native hawaiian/pacific islander` <dbl>,
# `anti-multi-racial groups` <dbl>, `anti-other race` <dbl>,
# `anti-jewish` <dbl>, `anti-catholic` <dbl>, `anti-protestant` <dbl>,
# `anti-islamic (muslim)` <dbl>, `anti-multi-religious groups` <dbl>, …
What did we talk about? Look at the summary of the dataset, what interests you? From there select which data crimes to heavily focus on
summary(hatecrimes) county year crime type anti-male
Length:423 Min. :2010 Length:423 Min. :0.000000
Class :character 1st Qu.:2011 Class :character 1st Qu.:0.000000
Mode :character Median :2013 Mode :character Median :0.000000
Mean :2013 Mean :0.007092
3rd Qu.:2015 3rd Qu.:0.000000
Max. :2016 Max. :1.000000
anti-female anti-transgender anti-gender identity expression
Min. :0.00000 Min. :0.00000 Min. :0.00000
1st Qu.:0.00000 1st Qu.:0.00000 1st Qu.:0.00000
Median :0.00000 Median :0.00000 Median :0.00000
Mean :0.01655 Mean :0.04728 Mean :0.05674
3rd Qu.:0.00000 3rd Qu.:0.00000 3rd Qu.:0.00000
Max. :1.00000 Max. :5.00000 Max. :3.00000
anti-age* anti-white anti-black
Min. :0.00000 Min. : 0.0000 Min. : 0.000
1st Qu.:0.00000 1st Qu.: 0.0000 1st Qu.: 0.000
Median :0.00000 Median : 0.0000 Median : 1.000
Mean :0.05201 Mean : 0.3357 Mean : 1.761
3rd Qu.:0.00000 3rd Qu.: 0.0000 3rd Qu.: 2.000
Max. :9.00000 Max. :11.0000 Max. :18.000
anti-american indian/alaskan native anti-asian
Min. :0.000000 Min. :0.0000
1st Qu.:0.000000 1st Qu.:0.0000
Median :0.000000 Median :0.0000
Mean :0.007092 Mean :0.1773
3rd Qu.:0.000000 3rd Qu.:0.0000
Max. :1.000000 Max. :8.0000
anti-native hawaiian/pacific islander anti-multi-racial groups anti-other race
Min. :0 Min. :0.00000 Min. :0
1st Qu.:0 1st Qu.:0.00000 1st Qu.:0
Median :0 Median :0.00000 Median :0
Mean :0 Mean :0.08511 Mean :0
3rd Qu.:0 3rd Qu.:0.00000 3rd Qu.:0
Max. :0 Max. :3.00000 Max. :0
anti-jewish anti-catholic anti-protestant anti-islamic (muslim)
Min. : 0.000 Min. : 0.0000 Min. :0.00000 Min. : 0.0000
1st Qu.: 0.000 1st Qu.: 0.0000 1st Qu.:0.00000 1st Qu.: 0.0000
Median : 0.000 Median : 0.0000 Median :0.00000 Median : 0.0000
Mean : 3.981 Mean : 0.2695 Mean :0.02364 Mean : 0.4704
3rd Qu.: 3.000 3rd Qu.: 0.0000 3rd Qu.:0.00000 3rd Qu.: 0.0000
Max. :82.000 Max. :12.0000 Max. :1.00000 Max. :10.0000
anti-multi-religious groups anti-atheism/agnosticism
Min. : 0.00000 Min. :0
1st Qu.: 0.00000 1st Qu.:0
Median : 0.00000 Median :0
Mean : 0.07565 Mean :0
3rd Qu.: 0.00000 3rd Qu.:0
Max. :10.00000 Max. :0
anti-religious practice generally anti-other religion anti-buddhist
Min. :0.000000 Min. :0.000 Min. :0
1st Qu.:0.000000 1st Qu.:0.000 1st Qu.:0
Median :0.000000 Median :0.000 Median :0
Mean :0.007092 Mean :0.104 Mean :0
3rd Qu.:0.000000 3rd Qu.:0.000 3rd Qu.:0
Max. :2.000000 Max. :4.000 Max. :0
anti-eastern orthodox (greek, russian, etc.) anti-hindu
Min. :0.000000 Min. :0.000000
1st Qu.:0.000000 1st Qu.:0.000000
Median :0.000000 Median :0.000000
Mean :0.002364 Mean :0.002364
3rd Qu.:0.000000 3rd Qu.:0.000000
Max. :1.000000 Max. :1.000000
anti-jehovahs witness anti-mormon anti-other christian anti-sikh
Min. :0 Min. :0 Min. :0.00000 Min. :0
1st Qu.:0 1st Qu.:0 1st Qu.:0.00000 1st Qu.:0
Median :0 Median :0 Median :0.00000 Median :0
Mean :0 Mean :0 Mean :0.01655 Mean :0
3rd Qu.:0 3rd Qu.:0 3rd Qu.:0.00000 3rd Qu.:0
Max. :0 Max. :0 Max. :3.00000 Max. :0
anti-hispanic anti-arab anti-other ethnicity/national origin
Min. : 0.0000 Min. :0.00000 Min. : 0.0000
1st Qu.: 0.0000 1st Qu.:0.00000 1st Qu.: 0.0000
Median : 0.0000 Median :0.00000 Median : 0.0000
Mean : 0.3735 Mean :0.06619 Mean : 0.2837
3rd Qu.: 0.0000 3rd Qu.:0.00000 3rd Qu.: 0.0000
Max. :17.0000 Max. :2.00000 Max. :19.0000
anti-non-hispanic* anti-gay male anti-gay female
Min. :0 Min. : 0.000 Min. :0.0000
1st Qu.:0 1st Qu.: 0.000 1st Qu.:0.0000
Median :0 Median : 0.000 Median :0.0000
Mean :0 Mean : 1.499 Mean :0.2411
3rd Qu.:0 3rd Qu.: 1.000 3rd Qu.:0.0000
Max. :0 Max. :36.000 Max. :8.0000
anti-gay (male and female) anti-heterosexual anti-bisexual
Min. :0.0000 Min. :0.000000 Min. :0.000000
1st Qu.:0.0000 1st Qu.:0.000000 1st Qu.:0.000000
Median :0.0000 Median :0.000000 Median :0.000000
Mean :0.1017 Mean :0.002364 Mean :0.004728
3rd Qu.:0.0000 3rd Qu.:0.000000 3rd Qu.:0.000000
Max. :4.0000 Max. :1.000000 Max. :1.000000
anti-physical disability anti-mental disability total incidents
Min. :0.00000 Min. :0.000000 Min. : 1.00
1st Qu.:0.00000 1st Qu.:0.000000 1st Qu.: 1.00
Median :0.00000 Median :0.000000 Median : 3.00
Mean :0.01182 Mean :0.009456 Mean : 10.09
3rd Qu.:0.00000 3rd Qu.:0.000000 3rd Qu.: 10.00
Max. :1.00000 Max. :1.000000 Max. :101.00
total victims total offenders
Min. : 1.00 Min. : 1.00
1st Qu.: 1.00 1st Qu.: 1.00
Median : 3.00 Median : 3.00
Mean : 10.48 Mean : 11.77
3rd Qu.: 10.00 3rd Qu.: 11.00
Max. :106.00 Max. :113.00
I choose 6 different types of hype crimes that had either a max number of 3 or more. To see if there is some variance by selecting a smaller max.
hatecrimes2 <- hatecrimes |>
select(county, year, 'anti-hispanic', 'anti-other ethnicity/national origin', 'anti-other christian', 'anti-other religion', 'anti-multi-religious groups', 'anti-islamic (muslim)') |>
group_by(county, year)
head(hatecrimes2)# A tibble: 6 × 8
# Groups: county, year [4]
county year `anti-hispanic` anti-other ethnicity/n…¹ `anti-other christian`
<chr> <dbl> <dbl> <dbl> <dbl>
1 Albany 2016 0 0 0
2 Albany 2016 0 0 0
3 Allegany 2016 0 0 0
4 Bronx 2016 0 0 0
5 Bronx 2016 0 0 0
6 Broome 2016 0 0 0
# ℹ abbreviated name: ¹`anti-other ethnicity/national origin`
# ℹ 3 more variables: `anti-other religion` <dbl>,
# `anti-multi-religious groups` <dbl>, `anti-islamic (muslim)` <dbl>
Check the dimensions and the summary to make sure no missing values
# That also means checking the dimensions to count how many variables remain
dim(hatecrimes2)[1] 423 8
# There are currently 8 variables with 423 rows
summary(hatecrimes2) county year anti-hispanic
Length:423 Min. :2010 Min. : 0.0000
Class :character 1st Qu.:2011 1st Qu.: 0.0000
Mode :character Median :2013 Median : 0.0000
Mean :2013 Mean : 0.3735
3rd Qu.:2015 3rd Qu.: 0.0000
Max. :2016 Max. :17.0000
anti-other ethnicity/national origin anti-other christian anti-other religion
Min. : 0.0000 Min. :0.00000 Min. :0.000
1st Qu.: 0.0000 1st Qu.:0.00000 1st Qu.:0.000
Median : 0.0000 Median :0.00000 Median :0.000
Mean : 0.2837 Mean :0.01655 Mean :0.104
3rd Qu.: 0.0000 3rd Qu.:0.00000 3rd Qu.:0.000
Max. :19.0000 Max. :3.00000 Max. :4.000
anti-multi-religious groups anti-islamic (muslim)
Min. : 0.00000 Min. : 0.0000
1st Qu.: 0.00000 1st Qu.: 0.0000
Median : 0.00000 Median : 0.0000
Mean : 0.07565 Mean : 0.4704
3rd Qu.: 0.00000 3rd Qu.: 0.0000
Max. :10.00000 Max. :10.0000
Convert from wide to long format, let’s get into it
# It will take each column's hate crime type and combine them all into one column, which we will call victim_cat. As a result, each cell count will go into the new column called crimecount.
hatelong <- hatecrimes2 |>
pivot_longer(cols = 3:8,
names_to = "victim_cat",
values_to = "crimecount")Use the long format to create a facet plot, only after converting
hatecrimplot <- hatelong |>
ggplot(aes(year, crimecount)) +
geom_point() +
aes(color = victim_cat) +
facet_wrap(~victim_cat)
hatecrimplotLook deeper into crimes against against hispanics, islamic folk (muslims), and other ethnicity/national origin. (Note to self: This is really cool, the coding part not the crimes)
# From above we see that only three stood out on the criteria of higher raates of offenses reported
hatenew <- hatelong |>
filter(victim_cat %in% c("anti-hispanic","anti-islamic (muslim)", "anti-other ethnicity/national origin")) |>
group_by(year, county) |>
arrange(desc(crimecount))
hatenew# A tibble: 1,269 × 4
# Groups: year, county [277]
county year victim_cat crimecount
<chr> <dbl> <chr> <dbl>
1 Queens 2016 anti-other ethnicity/national origin 19
2 Richmond 2010 anti-hispanic 17
3 Kings 2014 anti-islamic (muslim) 10
4 Kings 2014 anti-other ethnicity/national origin 10
5 Suffolk 2010 anti-hispanic 10
6 Kings 2016 anti-islamic (muslim) 9
7 Kings 2015 anti-islamic (muslim) 7
8 Queens 2012 anti-islamic (muslim) 7
9 Suffolk 2012 anti-hispanic 7
10 Kings 2010 anti-islamic (muslim) 7
# ℹ 1,259 more rows
Plot these three types of hate crimes together
# This is crucial, use position = "dodge" rather than "identity" because it makes side-by-side bars rather than stacking them.
plot2 <- hatenew |>
ggplot() +
geom_bar(aes(x=year, y=crimecount, fill= victim_cat), position = "dodge", stat = "identity") +
labs(fill = "Hate Crime Type",
y = "Number of Hate Crime Incidents",
title = "Hate Crime Type in NY Counties Between 2010-2016",
caption = "Source: NY State Division of Criminal Justice Services")
plot2# We can see two spikes in crimes but within different years and crime types. Hispanics and other ethnicity/national origin dealt with over 15 hate crime incidents but the former in 2010 and the latter in 2016. Hate crimes for hispanics as we can see are plummeting throughout the years, but crimes against other ethnicity/national origin persists with an upward trendWhat about the counties?
# This will be the very last thing to explore. So instead of years as the x value it will be in favor of counties
plot3 <- hatenew |>
ggplot() +
geom_bar(aes(x = county, y = crimecount, fill = victim_cat), position = "dodge", stat = "identity") +
labs(fill = "Number of Hate Crime Incidents",
title = "Hate Crime Type in NY Counties Between 2010-2016",
caption = "Source: NY State Division of Criminal Justice Services")
plot3Well there are too many counties in this bar graph. To make sense of it we will only look into at the five counties with the highest number of incidents
counties <- hatenew |>
group_by(year, county) |>
summarize(sum = sum(crimecount)) |>
arrange(desc(sum))`summarise()` has grouped output by 'year'. You can override using the
`.groups` argument.
counties# A tibble: 277 × 3
# Groups: year [7]
year county sum
<dbl> <chr> <dbl>
1 2016 Queens 28
2 2010 Richmond 24
3 2014 Kings 24
4 2012 Queens 16
5 2012 Suffolk 16
6 2016 Kings 15
7 2010 Suffolk 14
8 2010 New York 13
9 2015 Kings 13
10 2010 Kings 11
# ℹ 267 more rows
All we will be doing is changing the group_by function with (county) then slice_max function to list the top 5
counties2 <- hatenew |>
group_by(county)|>
summarize(sum = sum(crimecount)) |>
slice_max(order_by = sum, n=5)
counties2# A tibble: 5 × 2
county sum
<chr> <dbl>
1 Kings 88
2 Queens 79
3 New York 70
4 Suffolk 54
5 Richmond 39
## At last we create a bargraph based of the data above. IMPORTANT: Only for the top five counties in 2012 with the highest incidents of hate-crimes. (Note to self: Fall in love with labs, that function will save you time)
plot4 <- hatenew |>
filter(county %in% c("Kings", "Queens", "New York", "Suffolk", "Richmond")) |>
ggplot() +
geom_bar(aes(x=county, y=crimecount, fill = victim_cat),
position = "dodge", stat = "identity") +
labs(y = "Number of Hate Crime Incidents",
title = "5 Counties in NY with Highest Incidents of Hate Crimes",
subtitle = "Between 2010-2016",
fill = "Hate Crime Type",
caption = "Source: NY State Division of Criminal Justice Services")
plot4How would this vary if calculations were say affected based on the same criteria but per year by population densities?
#Bring in census data for population of NY counties
nypop <- read_csv("newyorkpopulation.csv")Rows: 62 Columns: 8
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (1): Geography
dbl (7): 2010, 2011, 2012, 2013, 2014, 2015, 2016
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
Clean the county name to match the other dataset. Basically switch “Geography for”County”
nypop$Geography <- gsub(" , New York", "", nypop$Geography)
nypop$Geography <- gsub("County", "", nypop$Geography)
nypoplong <- nypop |>
rename(county = Geography) |>
gather("year", "population", 2:8)
nypoplong$year <- as.double(nypoplong$year)
head(nypoplong)# A tibble: 6 × 3
county year population
<chr> <dbl> <dbl>
1 Albany , New York 2010 304078
2 Allegany , New York 2010 48949
3 Bronx , New York 2010 1388240
4 Broome , New York 2010 200469
5 Cattaraugus , New York 2010 80249
6 Cayuga , New York 2010 79844
This is still important, remember we are focused on 2012
# We are looking at this because 2012 had the highest counts of hate crimes. More cleaning of the dataset
nypoplong12 <- nypoplong |>
filter(year == 2012) |>
arrange(desc(population)) |>
head(10)
nypoplong12$county<-gsub(" , New York","",nypoplong12$county)
nypoplong12# A tibble: 10 × 3
county year population
<chr> <dbl> <dbl>
1 Kings 2012 2572282
2 Queens 2012 2278024
3 New York 2012 1625121
4 Suffolk 2012 1499382
5 Bronx 2012 1414774
6 Nassau 2012 1350748
7 Westchester 2012 961073
8 Erie 2012 920792
9 Monroe 2012 748947
10 Richmond 2012 470978
# We are going to recall the total hate crime counts for each: Kings 88 Queens 79 New York 70 Suffolk 54 Richmond 39
# Filter hate crimes just for 2012 as well
counties12 <- counties |>
filter(year == 2012) |>
arrange(desc(sum))
counties12# A tibble: 41 × 3
# Groups: year [1]
year county sum
<dbl> <chr> <dbl>
1 2012 Queens 16
2 2012 Suffolk 16
3 2012 New York 10
4 2012 Richmond 6
5 2012 Kings 5
6 2012 Nassau 5
7 2012 Bronx 2
8 2012 Erie 2
9 2012 Albany 1
10 2012 Lewis 1
# ℹ 31 more rows
Join the Hate Crimes data with the NY population data to match 2012
datajoin <- counties12 |>
full_join(nypoplong12, by=c("county", "year"))
datajoin# A tibble: 41 × 4
# Groups: year [1]
year county sum population
<dbl> <chr> <dbl> <dbl>
1 2012 Queens 16 2278024
2 2012 Suffolk 16 1499382
3 2012 New York 10 1625121
4 2012 Richmond 6 470978
5 2012 Kings 5 2572282
6 2012 Nassau 5 1350748
7 2012 Bronx 2 1414774
8 2012 Erie 2 920792
9 2012 Albany 1 NA
10 2012 Lewis 1 NA
# ℹ 31 more rows
Calculate the rate of incidents per 100,000. Then arrange in descending order
datajoinrate <- datajoin |>
mutate(rate = sum/population*100000) |>
arrange(desc(rate))
datajoinrate# A tibble: 41 × 5
# Groups: year [1]
year county sum population rate
<dbl> <chr> <dbl> <dbl> <dbl>
1 2012 Richmond 6 470978 1.27
2 2012 Suffolk 16 1499382 1.07
3 2012 Queens 16 2278024 0.702
4 2012 New York 10 1625121 0.615
5 2012 Nassau 5 1350748 0.370
6 2012 Erie 2 920792 0.217
7 2012 Kings 5 2572282 0.194
8 2012 Bronx 2 1414774 0.141
9 2012 Westchester 1 961073 0.104
10 2012 Monroe 0 748947 0
# ℹ 31 more rows
dt <- datajoinrate[,c("county","rate")]
dt# A tibble: 41 × 2
county rate
<chr> <dbl>
1 Richmond 1.27
2 Suffolk 1.07
3 Queens 0.702
4 New York 0.615
5 Nassau 0.370
6 Erie 0.217
7 Kings 0.194
8 Bronx 0.141
9 Westchester 0.104
10 Monroe 0
# ℹ 31 more rows
Follow up, now we will aggregaye some of the categories
aggregategroups <- hatecrimes |>
pivot_longer(
cols = 4:44,
names_to = "victim_cat",
values_to = "crimecount"
)
unique(aggregategroups$victim_cat) [1] "anti-male"
[2] "anti-female"
[3] "anti-transgender"
[4] "anti-gender identity expression"
[5] "anti-age*"
[6] "anti-white"
[7] "anti-black"
[8] "anti-american indian/alaskan native"
[9] "anti-asian"
[10] "anti-native hawaiian/pacific islander"
[11] "anti-multi-racial groups"
[12] "anti-other race"
[13] "anti-jewish"
[14] "anti-catholic"
[15] "anti-protestant"
[16] "anti-islamic (muslim)"
[17] "anti-multi-religious groups"
[18] "anti-atheism/agnosticism"
[19] "anti-religious practice generally"
[20] "anti-other religion"
[21] "anti-buddhist"
[22] "anti-eastern orthodox (greek, russian, etc.)"
[23] "anti-hindu"
[24] "anti-jehovahs witness"
[25] "anti-mormon"
[26] "anti-other christian"
[27] "anti-sikh"
[28] "anti-hispanic"
[29] "anti-arab"
[30] "anti-other ethnicity/national origin"
[31] "anti-non-hispanic*"
[32] "anti-gay male"
[33] "anti-gay female"
[34] "anti-gay (male and female)"
[35] "anti-heterosexual"
[36] "anti-bisexual"
[37] "anti-physical disability"
[38] "anti-mental disability"
[39] "total incidents"
[40] "total victims"
[41] "total offenders"
aggregategroups <- aggregategroups |>
mutate(group = case_when(
victim_cat %in% c("anti-transgender", "anti-gayfemale", "anti-gendervictim_catendityexpression", "anti-gaymale", "anti-gay(maleandfemale", "anti-bisexual") ~ "anti-lgbtq",
victim_cat %in% c("anti-multi-racialgroups", "anti-jewish", "anti-protestant", "anti-multi-religousgroups", "anti-religiouspracticegenerally", "anti-buddhist", "anti-hindu", "anti-mormon", "anti-sikh", "anti-catholic", "anti-islamic(muslim)", "anti-atheism/agnosticism", "anti-otherreligion", "anti-easternorthodox(greek,russian,etc.)", "anti-jehovahswitness", "anti-otherchristian") ~ "anti-religion",
victim_cat %in% c("anti-asian", "anti-arab", "anti-non-hispanic", "anti-white", "anti-americanindian/alaskannative", "anti-nativehawaiian/pacificislander", "anti-otherrace", "anti-hispanic", "anti-otherethnicity/nationalorigin") ~ "anti-ethnicity",
victim_cat %in% c("anti-physicaldisability", "anti-mentaldisability") ~ "anti-disability",
victim_cat %in% c("anti-female", "anti-male") ~ "anti-gender",
TRUE ~ "others"))
aggregategroups# A tibble: 17,343 × 6
county year `crime type` victim_cat crimecount group
<chr> <dbl> <chr> <chr> <dbl> <chr>
1 Albany 2016 Crimes Against Persons anti-male 0 anti…
2 Albany 2016 Crimes Against Persons anti-female 0 anti…
3 Albany 2016 Crimes Against Persons anti-transgender 0 anti…
4 Albany 2016 Crimes Against Persons anti-gender identity ex… 0 othe…
5 Albany 2016 Crimes Against Persons anti-age* 0 othe…
6 Albany 2016 Crimes Against Persons anti-white 0 anti…
7 Albany 2016 Crimes Against Persons anti-black 1 othe…
8 Albany 2016 Crimes Against Persons anti-american indian/al… 0 othe…
9 Albany 2016 Crimes Against Persons anti-asian 0 anti…
10 Albany 2016 Crimes Against Persons anti-native hawaiian/pa… 0 othe…
# ℹ 17,333 more rows
Or create a subset with just LGBTQ
lgbtq <- hatecrimes |>
pivot_longer(
cols = 4:44,
names_to = "victim_cat",
values_to = "crimecount") |>
filter(victim_cat %in% c("anti-transgender", "anti-gayfemale", "anti-gendervictim_catendityexpression", "anti-gaymale", "anti-gay(maleandfemale", "anti-bisexual"))
lgbtq# A tibble: 846 × 5
county year `crime type` victim_cat crimecount
<chr> <dbl> <chr> <chr> <dbl>
1 Albany 2016 Crimes Against Persons anti-transgender 0
2 Albany 2016 Crimes Against Persons anti-bisexual 0
3 Albany 2016 Property Crimes anti-transgender 0
4 Albany 2016 Property Crimes anti-bisexual 0
5 Allegany 2016 Property Crimes anti-transgender 0
6 Allegany 2016 Property Crimes anti-bisexual 0
7 Bronx 2016 Crimes Against Persons anti-transgender 4
8 Bronx 2016 Crimes Against Persons anti-bisexual 0
9 Bronx 2016 Property Crimes anti-transgender 0
10 Bronx 2016 Property Crimes anti-bisexual 0
# ℹ 836 more rows
So what does all of this mean?
# Important Findings:
# 1) As you have mentioned before we started into cleaning, plotting, and so on, what as we did as an activity was flawed date due to possible bias. On a more positive note, we can track trends based on what groups we believe are of suspicion of prejudice and so forth.
# 2) Two unique case studies, one for gender specificity in regards of what time periods we believe deserves more research. That said, the same could be done for religion and who knows that conclusive answers we get
# 3) What about the hate crimes that aren't reported, or perhaps in another country? Stuff like that, crime is happening all the time it should be in our interests to find some answer to certain questions.