New Hate Crime

Quarto

Quarto enables you to weave together content and executable code into a finished document. To learn more about Quarto see https://quarto.org.

Running Code

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)
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: 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")
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 Crimes 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)) |>
  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")
plot4

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.
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