Hate Crimes Homework

Author

Olivia Yuengling

Essay/Student Response on the hateCrimes2010 data set

The hateCrimes2010 data set does a good job at describing hate crimes in each individual county, but it does have its own set of problems. For example, the title of the data set is titled “hateCrimes 2010” which can be misleading because it may tell the audience that the data set only measures the hate crimes in 2010. The data set actually measures hate crimes in the 2010s, so to make the data set title more accurate it can be renamed “hateCrimes2010s” by adding a “s” at the end to signify that the data set measures hate crimes during the 2010s instead of only the year 2010. Another issue is that the data set does not specify which state the counties belong to. I am assuming that the counties are from the state of New York. The title can be changed once again to “NewYorkhateCrimes2010s” to be more specific to new users.

If I were to hypothetically to go down a path studying the data set, I would create a map visualization of hate crimes in New York and investigate temporal trends. I would be interested in using GIS to create a map which would visualize the density of all hate crimes or individual hate crime types. This would help officials to visualize which areas of New York would have the highest rates of hate crimes. I am also interested in using the dataset to measure how prevalent hate crimes are in certain years for each individual county. And if I were to be given the dates of each hate crime committed and be able to integrate them into the dataset I would be able to analyze if the time of year has a correlation with the volume of hate crimes committed for certain groups.

After viewing and tweaking some of the code, I would like to further investigate the statistics of subsets in the data frame. This would require me to create the last chunk of code but instead of LGBTQ, I would do religion, ability, and race. I would like to investigate the volume of these over the years for each subset. I am also interested in creating a map visualization to measure the volume of each hate crime subset over the years. Like an animated map of New York that would measure the density of each hate crime type committed over the years of 2010-2016.

I would also want to investigate what counties have the highest rates of hate crimes, and investigate if there may be any factors that may correlate with the volume of hate crimes. These factors can include socioeconomic status, age, diversity rates, etc. This may give insight on if certain types of hate crimes are correlated to these factors.

Let’s open up the dataset

library(tidyverse)
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.1.4     ✔ readr     2.1.5
✔ forcats   1.0.0     ✔ stringr   1.5.1
✔ ggplot2   3.4.4     ✔ tibble    3.2.1
✔ lubridate 1.9.3     ✔ 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)
 hateCrimes2010 <- read_csv("C:/Users/omyue/OneDrive/Desktop/Montgomery College/Spring 24/Data 101/datasets/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.
 newyorkpopulation <- read_csv("C:/Users/omyue/OneDrive/Desktop/Montgomery College/Spring 24/Data 101/datasets/newyorkpopulation.csv")
Rows: 62 Columns: 8
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (2): Geography, 2016
dbl (6): 2010, 2011, 2012, 2013, 2014, 2015

ℹ 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.
hatecrimes <- hateCrimes2010

Removing spaces and putting the headers lowercase

names(hatecrimes) <- tolower(names(hatecrimes))
names(hatecrimes) <- gsub(" ","",names(hatecrimes))
head(hatecrimes)
# A tibble: 6 × 44
  county    year crimetype          `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-genderidentityexpression` <dbl>,
#   `anti-age*` <dbl>, `anti-white` <dbl>, `anti-black` <dbl>,
#   `anti-americanindian/alaskannative` <dbl>, `anti-asian` <dbl>,
#   `anti-nativehawaiian/pacificislander` <dbl>,
#   `anti-multi-racialgroups` <dbl>, `anti-otherrace` <dbl>,
#   `anti-jewish` <dbl>, `anti-catholic` <dbl>, `anti-protestant` <dbl>,
#   `anti-islamic(muslim)` <dbl>, `anti-multi-religiousgroups` <dbl>, …

Let’s make a five number summary for each variable

summary(hatecrimes)
    county               year       crimetype           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-genderidentityexpression
 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-americanindian/alaskannative   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-nativehawaiian/pacificislander anti-multi-racialgroups anti-otherrace
 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-religiousgroups 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-religiouspracticegenerally anti-otherreligion 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-easternorthodox(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-jehovahswitness  anti-mormon anti-otherchristian   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-otherethnicity/nationalorigin
 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-gaymale    anti-gayfemale   anti-gay(maleandfemale)
 Min.   :0          Min.   : 0.000   Min.   :0.0000   Min.   :0.0000         
 1st Qu.:0          1st Qu.: 0.000   1st Qu.:0.0000   1st Qu.:0.0000         
 Median :0          Median : 0.000   Median :0.0000   Median :0.0000         
 Mean   :0          Mean   : 1.499   Mean   :0.2411   Mean   :0.1017         
 3rd Qu.:0          3rd Qu.: 1.000   3rd Qu.:0.0000   3rd Qu.:0.0000         
 Max.   :0          Max.   :36.000   Max.   :8.0000   Max.   :4.0000         
 anti-heterosexual  anti-bisexual      anti-physicaldisability
 Min.   :0.000000   Min.   :0.000000   Min.   :0.00000        
 1st Qu.:0.000000   1st Qu.:0.000000   1st Qu.:0.00000        
 Median :0.000000   Median :0.000000   Median :0.00000        
 Mean   :0.002364   Mean   :0.004728   Mean   :0.01182        
 3rd Qu.:0.000000   3rd Qu.:0.000000   3rd Qu.:0.00000        
 Max.   :1.000000   Max.   :1.000000   Max.   :1.00000        
 anti-mentaldisability totalincidents    totalvictims    totaloffenders  
 Min.   :0.000000      Min.   :  1.00   Min.   :  1.00   Min.   :  1.00  
 1st Qu.:0.000000      1st Qu.:  1.00   1st Qu.:  1.00   1st Qu.:  1.00  
 Median :0.000000      Median :  3.00   Median :  3.00   Median :  3.00  
 Mean   :0.009456      Mean   : 10.09   Mean   : 10.48   Mean   : 11.77  
 3rd Qu.:0.000000      3rd Qu.: 10.00   3rd Qu.: 10.00   3rd Qu.: 11.00  
 Max.   :1.000000      Max.   :101.00   Max.   :106.00   Max.   :113.00  

Selecting the more prominent hate crimes…

hatecrimes2 <- hatecrimes |>
  select(county, year, `anti-black`, `anti-white`, `anti-jewish`, `anti-catholic`, `anti-age*`, `anti-islamic(muslim)`, `anti-multi-religiousgroups`, `anti-gaymale`, `anti-hispanic`,  `anti-otherethnicity/nationalorigin`) |>
  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-religiousgroups` <dbl>, `anti-gaymale` <dbl>,
#   `anti-hispanic` <dbl>, `anti-otherethnicity/nationalorigin` <dbl>

Check out the dimensions…

dim(hatecrimes2)
[1] 423  12
# There are currently 12 variables with 423 rows.
summary(hatecrimes2)
    county               year        anti-black       anti-white     
 Length:423         Min.   :2010   Min.   : 0.000   Min.   : 0.0000  
 Class :character   1st Qu.:2011   1st Qu.: 0.000   1st Qu.: 0.0000  
 Mode  :character   Median :2013   Median : 1.000   Median : 0.0000  
                    Mean   :2013   Mean   : 1.761   Mean   : 0.3357  
                    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-religiousgroups  anti-gaymale    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-otherethnicity/nationalorigin
 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)
hatecrimplot

hatenew <- hatelong |>
  filter( victim_cat %in% c("anti-black", "anti-jewish", "anti-gay male"))|>
  group_by(year, county) |>
  arrange(desc(crimecount))
hatenew
# A tibble: 846 × 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
# ℹ 836 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 Crime Incidents",
       title = "Hate Crime Type in NY Counties Between 2010-2016",
       caption = "Source: NY State Division of Criminal Justice Services")
plot2

plot3 <- 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 Crime Incidents",
       title = "Hate Crime Type in NY Counties Between 2010-2016",
       caption = "Source: NY State Division of Criminal Justice Services")
plot3

counties <- hatenew |>
  group_by(year, county)|>
  summarize(sum = sum(crimecount), .groups = "drop") |>
  arrange(desc(sum))
counties
# A tibble: 277 × 3
    year county    sum
   <dbl> <chr>   <dbl>
 1  2012 Kings     124
 2  2010 Kings      89
 3  2016 Kings      83
 4  2012 Suffolk    80
 5  2014 Kings      69
 6  2015 Kings      69
 7  2011 Kings      68
 8  2013 Kings      68
 9  2014 Suffolk    65
10  2013 Suffolk    64
# ℹ 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      570
2 Suffolk    317
3 Nassau     283
4 New York   266
5 Queens     175
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")
plot4

nypop <- newyorkpopulation
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.numeric(nypoplong$Year)
nypoplong$Population <- as.double(nypoplong$Population)
Warning: NAs introduced by coercion
head(nypoplong)
# A tibble: 6 × 4
  county                 Year  Population  year
  <chr>                  <chr>      <dbl> <dbl>
1 Albany , New York      2010      304078  2010
2 Allegany , New York    2010       48949  2010
3 Bronx , New York       2010     1388240  2010
4 Broome , New York      2010      200469  2010
5 Cattaraugus , New York 2010       80249  2010
6 Cayuga , New York      2010       79844  2010
nypoplong12 <- nypoplong |>
  filter(nypoplong$Year == 2012)|>
  arrange(desc(Population)) |>
  head(10)
nypoplong12$county<-gsub(" , New York","",nypoplong12$county)
nypoplong12
# A tibble: 10 × 4
   county      Year  Population  year
   <chr>       <chr>      <dbl> <dbl>
 1 Kings       2012     2572282  2012
 2 Queens      2012     2278024  2012
 3 New York    2012     1625121  2012
 4 Suffolk     2012     1499382  2012
 5 Bronx       2012     1414774  2012
 6 Nassau      2012     1350748  2012
 7 Westchester 2012      961073  2012
 8 Erie        2012      920792  2012
 9 Monroe      2012      748947  2012
10 Richmond    2012      470978  2012
counties12 <- counties |>
  filter(year == 2012) |>
  arrange(desc(sum)) 
counties12
# A tibble: 41 × 3
    year county     sum
   <dbl> <chr>    <dbl>
 1  2012 Kings      124
 2  2012 Suffolk     80
 3  2012 New York    54
 4  2012 Nassau      48
 5  2012 Queens      38
 6  2012 Erie        20
 7  2012 Bronx       19
 8  2012 Richmond    16
 9  2012 Multiple    14
10  2012 Dutchess     9
# ℹ 31 more rows
datajoin <- counties12 |>
  full_join(nypoplong12, by=c("county", "year"))
datajoin
# A tibble: 41 × 5
    year county     sum Year  Population
   <dbl> <chr>    <dbl> <chr>      <dbl>
 1  2012 Kings      124 2012     2572282
 2  2012 Suffolk     80 2012     1499382
 3  2012 New York    54 2012     1625121
 4  2012 Nassau      48 2012     1350748
 5  2012 Queens      38 2012     2278024
 6  2012 Erie        20 2012      920792
 7  2012 Bronx       19 2012     1414774
 8  2012 Richmond    16 2012      470978
 9  2012 Multiple    14 <NA>          NA
10  2012 Dutchess     9 <NA>          NA
# ℹ 31 more rows
sum_clean <- na.omit(datajoin$sum)
population_clean <- na.omit(datajoin$Population)
datajoinrate <- datajoin %>%
  mutate(rate = sum_clean / population_clean * 100000) %>%
  arrange(desc(rate))
Warning: There was 1 warning in `mutate()`.
ℹ In argument: `rate = sum_clean/population_clean * 1e+05`.
Caused by warning in `sum_clean / population_clean`:
! longer object length is not a multiple of shorter object length
datajoinrate
# A tibble: 41 × 6
    year county     sum Year  Population  rate
   <dbl> <chr>    <dbl> <chr>      <dbl> <dbl>
 1  2012 Suffolk     80 2012     1499382  5.34
 2  2012 Kings      124 2012     2572282  4.82
 3  2012 Nassau      48 2012     1350748  3.55
 4  2012 Richmond    16 2012      470978  3.40
 5  2012 New York    54 2012     1625121  3.32
 6  2012 Erie        20 2012      920792  2.17
 7  2012 Queens      38 2012     2278024  1.67
 8  2012 Multiple    14 <NA>          NA  1.46
 9  2012 Bronx       19 2012     1414774  1.34
10  2012 Dutchess     9 <NA>          NA  1.20
# ℹ 31 more rows
dt <- datajoinrate[,c("county","rate")]
dt
# A tibble: 41 × 2
   county    rate
   <chr>    <dbl>
 1 Suffolk   5.34
 2 Kings     4.82
 3 Nassau    3.55
 4 Richmond  3.40
 5 New York  3.32
 6 Erie      2.17
 7 Queens    1.67
 8 Multiple  1.46
 9 Bronx     1.34
10 Dutchess  1.20
# ℹ 31 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-genderidentityexpression"           
 [5] "anti-age*"                               
 [6] "anti-white"                              
 [7] "anti-black"                              
 [8] "anti-americanindian/alaskannative"       
 [9] "anti-asian"                              
[10] "anti-nativehawaiian/pacificislander"     
[11] "anti-multi-racialgroups"                 
[12] "anti-otherrace"                          
[13] "anti-jewish"                             
[14] "anti-catholic"                           
[15] "anti-protestant"                         
[16] "anti-islamic(muslim)"                    
[17] "anti-multi-religiousgroups"              
[18] "anti-atheism/agnosticism"                
[19] "anti-religiouspracticegenerally"         
[20] "anti-otherreligion"                      
[21] "anti-buddhist"                           
[22] "anti-easternorthodox(greek,russian,etc.)"
[23] "anti-hindu"                              
[24] "anti-jehovahswitness"                    
[25] "anti-mormon"                             
[26] "anti-otherchristian"                     
[27] "anti-sikh"                               
[28] "anti-hispanic"                           
[29] "anti-arab"                               
[30] "anti-otherethnicity/nationalorigin"      
[31] "anti-non-hispanic*"                      
[32] "anti-gaymale"                            
[33] "anti-gayfemale"                          
[34] "anti-gay(maleandfemale)"                 
[35] "anti-heterosexual"                       
[36] "anti-bisexual"                           
[37] "anti-physicaldisability"                 
[38] "anti-mentaldisability"                   
[39] "totalincidents"                          
[40] "totalvictims"                            
[41] "totaloffenders"                          
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 crimetype              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-genderidentityexpr…          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-americanindian/ala…          0 anti…
 9 Albany  2016 Crimes Against Persons anti-asian                        0 anti…
10 Albany  2016 Crimes Against Persons anti-nativehawaiian/pac…          0 anti…
# ℹ 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.gay.male", "anti-gay(maleandfemale", "anti-bisexual"))
lgbtq
# A tibble: 846 × 5
   county    year crimetype              victim_cat     crimecount
   <chr>    <dbl> <chr>                  <chr>               <dbl>
 1 Albany    2016 Crimes Against Persons anti-gayfemale          0
 2 Albany    2016 Crimes Against Persons anti-bisexual           0
 3 Albany    2016 Property Crimes        anti-gayfemale          0
 4 Albany    2016 Property Crimes        anti-bisexual           0
 5 Allegany  2016 Property Crimes        anti-gayfemale          0
 6 Allegany  2016 Property Crimes        anti-bisexual           0
 7 Bronx     2016 Crimes Against Persons anti-gayfemale          1
 8 Bronx     2016 Crimes Against Persons anti-bisexual           0
 9 Bronx     2016 Property Crimes        anti-gayfemale          0
10 Bronx     2016 Property Crimes        anti-bisexual           0
# ℹ 836 more rows