1 + 1[1] 2
Quarto enables you to weave together content and executable code into a finished document. To learn more about Quarto see https://quarto.org.
When you click the Render button a document will be generated that includes both content and the output of embedded code. You can embed code like this:
1 + 1[1] 2
You can add options to executable code like this
[1] 4
The echo: false option disables the printing of code (only output is displayed).
library(tidyverse)── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr 1.2.1 ✔ readr 2.2.0
✔ forcats 1.0.1 ✔ stringr 1.6.0
✔ ggplot2 4.0.3 ✔ tibble 3.3.1
✔ lubridate 1.9.5 ✔ tidyr 1.3.2
✔ purrr 1.2.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
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.
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 0
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>, …
summary(hatecrimes) county year crime type anti-male
Length :423 Min. :2010 Length :423 Min. :0.000000
N.unique : 60 1st Qu.:2011 N.unique : 3 1st Qu.:0.000000
N.blank : 0 Median :2013 N.blank : 0 Median :0.000000
Min.nchar: 4 Mean :2013 Min.nchar: 9 Mean :0.007092
Max.nchar: 12 3rd Qu.:2015 Max.nchar: 22 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.05674 Mean :0.04728
3rd Qu.:0.00000 3rd Qu.:0.00000 3rd Qu.:0.00000
Max. :1.00000 Max. :3.00000 Max. :5.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.01891 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.78
3rd Qu.: 10.00 3rd Qu.: 11.00
Max. :106.00 Max. :113.00
hatecrimes2 <- hatecrimes |>
select(county, year, `anti-black`, `anti-white`, `anti-jewish`, `anti-catholic`, `anti-age*`, `anti-islamic (muslim)`, `anti-multi-religious groups`, `anti-gay male`, `anti-hispanic`, `anti-other ethnicity/national origin`) |>
group_by(county, year)
head(hatecrimes2)# A tibble: 6 × 12
# Groups: county, year [4]
county year `anti-black` `anti-white` `anti-jewish` `anti-catholic`
<chr> <dbl> <dbl> <dbl> <dbl> <dbl>
1 Albany 2016 1 0 0 0
2 Albany 2016 2 0 0 0
3 Allegany 2016 1 0 0 0
4 Bronx 2016 0 1 0 0
5 Bronx 2016 0 1 1 0
6 Broome 2016 1 0 0 0
# ℹ 6 more variables: `anti-age*` <dbl>, `anti-islamic (muslim)` <dbl>,
# `anti-multi-religious groups` <dbl>, `anti-gay male` <dbl>,
# `anti-hispanic` <dbl>, `anti-other ethnicity/national origin` <dbl>
dim(hatecrimes2)[1] 423 12
summary(hatecrimes2) county year anti-black anti-white
Length :423 Min. :2010 Min. : 0.000 Min. : 0.0000
N.unique : 60 1st Qu.:2011 1st Qu.: 0.000 1st Qu.: 0.0000
N.blank : 0 Median :2013 Median : 1.000 Median : 0.0000
Min.nchar: 4 Mean :2013 Mean : 1.761 Mean : 0.3357
Max.nchar: 12 3rd Qu.:2015 3rd Qu.: 2.000 3rd Qu.: 0.0000
Max. :2016 Max. :18.000 Max. :11.0000
anti-jewish anti-catholic anti-age* 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.05201 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. :9.00000 Max. :10.0000
anti-multi-religious groups anti-gay male anti-hispanic
Min. : 0.00000 Min. : 0.000 Min. : 0.0000
1st Qu.: 0.00000 1st Qu.: 0.000 1st Qu.: 0.0000
Median : 0.00000 Median : 0.000 Median : 0.0000
Mean : 0.07565 Mean : 1.499 Mean : 0.3735
3rd Qu.: 0.00000 3rd Qu.: 1.000 3rd Qu.: 0.0000
Max. :10.00000 Max. :36.000 Max. :17.0000
anti-other ethnicity/national origin
Min. : 0.0000
1st Qu.: 0.0000
Median : 0.0000
Mean : 0.2837
3rd Qu.: 0.0000
Max. :19.0000
hatelong <- hatecrimes2 |>
pivot_longer(
cols = 3:12,
names_to = "victim_cat",
values_to = "crimecount")hatecrimplot <- hatelong |>
ggplot(aes(year, crimecount)) +
geom_point() +
aes(color = victim_cat) +
facet_wrap(~victim_cat)
hatecrimplothatenew <- hatelong |>
filter(victim_cat %in% c("anti-black", "anti-jewish", "anti-gay male")) |>
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 Kings 2012 anti-jewish 82
2 Kings 2016 anti-jewish 51
3 Suffolk 2014 anti-jewish 48
4 Suffolk 2012 anti-jewish 48
5 Kings 2011 anti-jewish 44
6 Kings 2013 anti-jewish 41
7 Kings 2010 anti-jewish 39
8 Nassau 2011 anti-jewish 38
9 Suffolk 2013 anti-jewish 37
10 Nassau 2016 anti-jewish 36
# ℹ 1,259 more rows
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 Crimes Incidents",
title = "Hate Crime Type in NY Counties Between 2010-2016",
caption = "Source: NY State Division of Criminal Justice Services")
plot2plot3 <- hatenew |>
ggplot() +
geom_bar(aes(x=county, y=crimecount, fill = victim_cat),
position = "dodge", stat = "identity") +
labs(fill = "hate Crime Type",
y = "Number of Hate Crimes Incidents",
title = "Hate Crime Type in NY Counties Between 2010-2016",
caption = "Source: NY State Division of Criminal Justice Services")
plot3counties <- hatenew |>
group_by(year, county) |>
summarize(sum = sum(crimecount)) |>
arrange(desc(sum))`summarise()` has regrouped the output.
ℹ Summaries were computed grouped by year and county.
ℹ Output is grouped by year.
ℹ Use `summarise(.groups = "drop_last")` to silence this message.
ℹ Use `summarise(.by = c(year, county))` for per-operation grouping
(`?dplyr::dplyr_by`) instead.
counties# A tibble: 277 × 3
# Groups: year [7]
year county sum
<dbl> <chr> <dbl>
1 2012 Kings 136
2 2010 Kings 110
3 2016 Kings 101
4 2013 Kings 96
5 2014 Kings 94
6 2015 Kings 90
7 2011 Kings 86
8 2016 New York 86
9 2012 Suffolk 83
10 2013 New York 75
# ℹ 267 more rows
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 713
2 New York 459
3 Suffolk 360
4 Nassau 298
5 Queens 235
plot4 <-hatenew |>
filter(county %in% c("Kings", "New York", "Suffolk", "Nassau", "Queens")) |>
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")
plot4nypop <- 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.
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
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
counties12 <- counties |>
filter(year == 2012) |>
arrange(desc(sum))
counties12# A tibble: 41 × 3
# Groups: year [1]
year county sum
<dbl> <chr> <dbl>
1 2012 Kings 136
2 2012 Suffolk 83
3 2012 New York 71
4 2012 Nassau 48
5 2012 Queens 48
6 2012 Erie 28
7 2012 Bronx 23
8 2012 Richmond 18
9 2012 Multiple 14
10 2012 Westchester 13
# ℹ 31 more rows
datajoin <- counties12 |>
full_join(nypoplong12, by=c("county", "year"))
datajoin# A tibble: 51 × 4
# Groups: year [1]
year county sum population
<dbl> <chr> <dbl> <dbl>
1 2012 Kings 136 NA
2 2012 Suffolk 83 NA
3 2012 New York 71 NA
4 2012 Nassau 48 NA
5 2012 Queens 48 NA
6 2012 Erie 28 NA
7 2012 Bronx 23 NA
8 2012 Richmond 18 NA
9 2012 Multiple 14 NA
10 2012 Westchester 13 NA
# ℹ 41 more rows
datajoin<- counties12 |>
full_join(nypoplong12, by=c("county", "year"))
datajoin# A tibble: 51 × 4
# Groups: year [1]
year county sum population
<dbl> <chr> <dbl> <dbl>
1 2012 Kings 136 NA
2 2012 Suffolk 83 NA
3 2012 New York 71 NA
4 2012 Nassau 48 NA
5 2012 Queens 48 NA
6 2012 Erie 28 NA
7 2012 Bronx 23 NA
8 2012 Richmond 18 NA
9 2012 Multiple 14 NA
10 2012 Westchester 13 NA
# ℹ 41 more rows
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
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 0
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