Created
September 19, 2025 05:54
-
-
Save acbass49/bd6f6b68be380f8408b160c86646494a to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| library(tidyverse) | |
| library(binom) | |
| library(haven) | |
| library(car) | |
| library(ggtext) | |
| library(sjlabelled) | |
| # Here is the sheet I used to merge in the gun control variable: | |
| # https://docs.google.com/spreadsheets/d/13Fo6SEF_B9nTSmnt3kLFt_EaVaNIvWl_iTwXUUoB3-Y/edit?usp=sharing | |
| data <- readRDS("./data/CES/cumulative_2006-2024.rds") | |
| data <- data |> | |
| mutate(id = paste0(year, "X", case_id)) |> | |
| left_join(read.csv("./data/CES/gun_control.csv"), by = "id") |> | |
| mutate(year = year.x) | |
| data$mormon <- ifelse(data$religion == 3, 1, 0) | |
| # own a gun | |
| data |> | |
| count(owngun, wt=weight) |> | |
| drop_na() |> | |
| mutate(prop = n / sum(n)) | |
| data |> | |
| group_by(pid3) |> | |
| count(owngun, wt=weight) |> | |
| drop_na() |> | |
| mutate(prop = n / sum(n)) |> | |
| filter(pid3 %in% 1:3) | |
| data |> | |
| group_by(mormon) |> | |
| count(owngun, wt=weight) |> | |
| drop_na() |> | |
| mutate( | |
| prop = n / sum(n), | |
| total_n = sum(n), | |
| lower = binom.confint(x = n, n = total_n, method = "asymptotic")$lower, | |
| upper = binom.confint(x = n, n = total_n, method = "asymptotic")$upper | |
| ) | |
| # favor_background_checks | |
| plot <- data |> | |
| group_by(year) |> | |
| count(favor_background_checks, wt=weight) |> | |
| drop_na() |> | |
| mutate( | |
| prop = n / sum(n), | |
| total_n = sum(n), | |
| lower = binom.confint(x = n, n = total_n, method = "asymptotic")$lower, | |
| upper = binom.confint(x = n, n = total_n, method = "asymptotic")$upper, | |
| audience = 'US Overall' | |
| ) |> | |
| filter(favor_background_checks == 1) |> | |
| select(-n, -total_n, -favor_background_checks) |> | |
| bind_rows( | |
| data |> | |
| group_by(year, pid3) |> | |
| count(favor_background_checks, wt=weight) |> | |
| drop_na() |> | |
| mutate( | |
| prop = n / sum(n), | |
| total_n = sum(n), | |
| lower = binom.confint(x = n, n = total_n, method = "asymptotic")$lower, | |
| upper = binom.confint(x = n, n = total_n, method = "asymptotic")$upper, | |
| audience = sjlabelled::as_label(pid3) | |
| ) |> | |
| filter(pid3 %in% 1:3 & favor_background_checks == 1) |> | |
| ungroup() |> | |
| select(-pid3, -n, -total_n, -favor_background_checks) | |
| ) |> | |
| bind_rows( | |
| data |> | |
| group_by(year, mormon) |> | |
| count(favor_background_checks, wt=weight) |> | |
| drop_na() |> | |
| mutate( | |
| prop = n / sum(n), | |
| total_n = sum(n), | |
| lower = binom.confint(x = n, n = total_n, method = "asymptotic")$lower, | |
| upper = binom.confint(x = n, n = total_n, method = "asymptotic")$upper, | |
| audience = 'Mormon' | |
| ) |> | |
| filter(favor_background_checks == 1 & mormon == 1) |> | |
| ungroup() |> | |
| select(-mormon, -n, -total_n, -favor_background_checks) | |
| ) |> | |
| mutate(audience = factor(audience, levels = c('US Overall', 'Democrat', 'Independent', 'Republican', 'Mormon'))) |> | |
| ggplot(aes(x = year, y = prop, group = audience, color = audience)) + | |
| geom_line() + | |
| geom_point(size = 3, stroke = 1.5) + | |
| geom_errorbar(aes(ymin = lower, ymax = upper), width = 0.2) + | |
| geom_text(aes(label = scales::percent(prop, accuracy = 1)), size = 2, family = "Cairo", fontface = "bold", color = "black") + | |
| labs( | |
| title = "Support for Background Checks on All Gun Sales", | |
| subtitle = "By Political Party and Mormons", | |
| x = "Year", | |
| y = "Proportion", | |
| caption = "@mormon_metrics\nData: Cooperative Election Study (CES) 2013-24" | |
| ) + | |
| theme_minimal() + | |
| scale_y_continuous(labels = scales::percent_format(accuracy = 1), limits = c(0.6,1) , breaks = seq(0.6, 1, by = 0.1)) + | |
| scale_x_continuous(breaks = seq(2006, 2024, by = 2)) + | |
| scale_color_manual(values = c('US Overall' = 'grey75', 'Democrat' = '#9595ee', 'Independent' = '#ca8bf1', 'Republican' = 'tomato', 'Mormon' = 'goldenrod')) + | |
| theme( | |
| axis.ticks = element_blank(), | |
| axis.title = element_text(size = 14), | |
| axis.text.y = element_text(size = 10), | |
| axis.text.x = element_text(size = 10, margin = margin(t = -5)), | |
| plot.background = element_rect(fill = "grey95"), # Change entire plot background color here | |
| panel.background = element_blank(), | |
| text = element_text(face = "bold", family = "Cairo"), | |
| plot.title = element_text(size = 15, face = "bold", hjust = 0.5), | |
| plot.subtitle = element_text(size = 11, hjust = 0.5), | |
| plot.title.position = "plot", | |
| plot.subtitle.position = "plot", | |
| legend.title = element_blank(), | |
| legend.background = element_blank(), | |
| legend.box.background = element_blank(), | |
| legend.text = element_text(size = 7), | |
| legend.key = element_blank(), | |
| panel.grid = element_blank(), | |
| legend.position = "bottom", | |
| panel.grid.major.y = element_line(color = "lightgrey", linetype = 'solid'), | |
| plot.caption = element_text(size = 8,family = "Cairo") | |
| ) | |
| ggsave("./images/17_gun_control_1.png", width = 1500, height = 1500, units = "px", dpi = 300) | |
| # favor_ban_assault_rifles | |
| plot <- data |> | |
| group_by(year) |> | |
| count(favor_ban_assault_rifles, wt=weight) |> | |
| drop_na() |> | |
| mutate( | |
| prop = n / sum(n), | |
| total_n = sum(n), | |
| lower = binom.confint(x = n, n = total_n, method = "asymptotic")$lower, | |
| upper = binom.confint(x = n, n = total_n, method = "asymptotic")$upper, | |
| audience = 'US Overall' | |
| ) |> | |
| filter(favor_ban_assault_rifles == 1) |> | |
| select(-n, -total_n, -favor_ban_assault_rifles) |> | |
| bind_rows( | |
| data |> | |
| group_by(year, pid3) |> | |
| count(favor_ban_assault_rifles, wt=weight) |> | |
| drop_na() |> | |
| mutate( | |
| prop = n / sum(n), | |
| total_n = sum(n), | |
| lower = binom.confint(x = n, n = total_n, method = "asymptotic")$lower, | |
| upper = binom.confint(x = n, n = total_n, method = "asymptotic")$upper, | |
| audience = sjlabelled::as_label(pid3) | |
| ) |> | |
| filter(pid3 %in% 1:3 & favor_ban_assault_rifles == 1) |> | |
| ungroup() |> | |
| select(-pid3, -n, -total_n, -favor_ban_assault_rifles) | |
| ) |> | |
| bind_rows( | |
| data |> | |
| group_by(year, mormon) |> | |
| count(favor_ban_assault_rifles, wt=weight) |> | |
| drop_na() |> | |
| mutate( | |
| prop = n / sum(n), | |
| total_n = sum(n), | |
| lower = binom.confint(x = n, n = total_n, method = "asymptotic")$lower, | |
| upper = binom.confint(x = n, n = total_n, method = "asymptotic")$upper, | |
| audience = 'Mormon' | |
| ) |> | |
| filter(favor_ban_assault_rifles == 1 & mormon == 1) |> | |
| ungroup() |> | |
| select(-mormon, -n, -total_n, -favor_ban_assault_rifles) | |
| ) |> | |
| mutate(audience = factor(audience, levels = c('US Overall', 'Democrat', 'Independent', 'Republican', 'Mormon'))) |> | |
| ggplot(aes(x = year, y = prop, group = audience, color = audience)) + | |
| geom_line() + | |
| geom_point(size = 3, stroke = 1.5) + | |
| geom_errorbar(aes(ymin = lower, ymax = upper), width = 0.2) + | |
| geom_text(aes(label = scales::percent(prop, accuracy = 1)), size = 2, family = "Cairo", fontface = "bold", color = "black") + | |
| labs( | |
| title = "Support for Banning Assault Rifles", | |
| subtitle = "By Political Party and Mormons", | |
| x = "Year", | |
| y = "Proportion", | |
| caption = "@mormon_metrics\nData: Cooperative Election Study (CES) 2013-24" | |
| ) + | |
| theme_minimal() + | |
| scale_y_continuous(labels = scales::percent_format(accuracy = 1), limits = c(0.3,1) , breaks = seq(0.3, 1, by = 0.1)) + | |
| scale_x_continuous(breaks = seq(2006, 2024, by = 2)) + | |
| scale_color_manual(values = c('US Overall' = 'grey75', 'Democrat' = '#9595ee', 'Independent' = '#ca8bf1', 'Republican' = 'tomato', 'Mormon' = 'goldenrod')) + | |
| theme( | |
| axis.ticks = element_blank(), | |
| axis.title = element_text(size = 14), | |
| axis.text.y = element_text(size = 10), | |
| axis.text.x = element_text(size = 10, margin = margin(t = -5)), | |
| plot.background = element_rect(fill = "grey95"), # Change entire plot background color here | |
| panel.background = element_blank(), | |
| text = element_text(face = "bold", family = "Cairo"), | |
| plot.title = element_text(size = 15, face = "bold", hjust = 0.5), | |
| plot.subtitle = element_text(size = 11, hjust = 0.5), | |
| plot.title.position = "plot", | |
| plot.subtitle.position = "plot", | |
| legend.title = element_blank(), | |
| legend.background = element_blank(), | |
| legend.box.background = element_blank(), | |
| legend.text = element_text(size = 7), | |
| legend.key = element_blank(), | |
| panel.grid = element_blank(), | |
| legend.position = "bottom", | |
| panel.grid.major.y = element_line(color = "lightgrey", linetype = 'solid'), | |
| plot.caption = element_text(size = 8,family = "Cairo") | |
| ) | |
| ggsave("./images/17_gun_control_2.png", width = 1500, height = 1500, units = "px", dpi = 300) | |
| # oppose_easy_permit | |
| plot <- data |> | |
| group_by(year) |> | |
| count(oppose_easy_permit, wt=weight) |> | |
| drop_na() |> | |
| mutate( | |
| prop = n / sum(n), | |
| total_n = sum(n), | |
| lower = binom.confint(x = n, n = total_n, method = "asymptotic")$lower, | |
| upper = binom.confint(x = n, n = total_n, method = "asymptotic")$upper, | |
| audience = 'US Overall' | |
| ) |> | |
| filter(oppose_easy_permit == 1) |> | |
| select(-n, -total_n, -oppose_easy_permit) |> | |
| bind_rows( | |
| data |> | |
| group_by(year, pid3) |> | |
| count(oppose_easy_permit, wt=weight) |> | |
| drop_na() |> | |
| mutate( | |
| prop = n / sum(n), | |
| total_n = sum(n), | |
| lower = binom.confint(x = n, n = total_n, method = "asymptotic")$lower, | |
| upper = binom.confint(x = n, n = total_n, method = "asymptotic")$upper, | |
| audience = sjlabelled::as_label(pid3) | |
| ) |> | |
| filter(pid3 %in% 1:3 & oppose_easy_permit == 1) |> | |
| ungroup() |> | |
| select(-pid3, -n, -total_n, -oppose_easy_permit) | |
| ) |> | |
| bind_rows( | |
| data |> | |
| group_by(year, mormon) |> | |
| count(oppose_easy_permit, wt=weight) |> | |
| drop_na() |> | |
| mutate( | |
| prop = n / sum(n), | |
| total_n = sum(n), | |
| lower = binom.confint(x = n, n = total_n, method = "asymptotic")$lower, | |
| upper = binom.confint(x = n, n = total_n, method = "asymptotic")$upper, | |
| audience = 'Mormon' | |
| ) |> | |
| filter(oppose_easy_permit == 1 & mormon == 1) |> | |
| ungroup() |> | |
| select(-mormon, -n, -total_n, -oppose_easy_permit) | |
| ) |> | |
| mutate(audience = factor(audience, levels = c('US Overall', 'Democrat', 'Independent', 'Republican', 'Mormon'))) |> | |
| ggplot(aes(x = year, y = prop, group = audience, color = audience)) + | |
| geom_line() + | |
| geom_point(size = 3, stroke = 1.5) + | |
| geom_errorbar(aes(ymin = lower, ymax = upper), width = 0.2) + | |
| geom_text(aes(label = scales::percent(prop, accuracy = 1)), size = 2, family = "Cairo", fontface = "bold", color = "black") + | |
| labs( | |
| title = "Oppose Making it Easier To Get A Concealed Carry Permit", | |
| subtitle = "By Political Party and Mormons", | |
| x = "Year", | |
| y = "Proportion", | |
| caption = "@mormon_metrics\nData: Cooperative Election Study (CES) 2013-24" | |
| ) + | |
| theme_minimal() + | |
| scale_y_continuous(labels = scales::percent_format(accuracy = 1), limits = c(0.3,1) , breaks = seq(0.3, 1, by = 0.1)) + | |
| scale_x_continuous(breaks = seq(2006, 2024, by = 2)) + | |
| scale_color_manual(values = c('US Overall' = 'grey75', 'Democrat' = '#9595ee', 'Independent' = '#ca8bf1', 'Republican' = 'tomato', 'Mormon' = 'goldenrod')) + | |
| theme( | |
| axis.ticks = element_blank(), | |
| axis.title = element_text(size = 14), | |
| axis.text.y = element_text(size = 10), | |
| axis.text.x = element_text(size = 10, margin = margin(t = -5)), | |
| plot.background = element_rect(fill = "grey95"), # Change entire plot background color here | |
| panel.background = element_blank(), | |
| text = element_text(face = "bold", family = "Cairo"), | |
| plot.title = element_text(size = 14, face = "bold", hjust = 0.5), | |
| plot.subtitle = element_text(size = 11, hjust = 0.5), | |
| plot.title.position = "plot", | |
| plot.subtitle.position = "plot", | |
| legend.title = element_blank(), | |
| legend.background = element_blank(), | |
| legend.box.background = element_blank(), | |
| legend.text = element_text(size = 7), | |
| legend.key = element_blank(), | |
| panel.grid = element_blank(), | |
| legend.position = "bottom", | |
| panel.grid.major.y = element_line(color = "lightgrey", linetype = 'solid'), | |
| plot.caption = element_text(size = 8,family = "Cairo") | |
| ) | |
| ggsave("./images/17_gun_control_3.png", width = 1500, height = 1500, units = "px", dpi = 300) | |
| # Bipartisan Safer Communities Act (2022) | |
| data |> | |
| count(bpsca, wt=weight) |> | |
| drop_na() |> | |
| mutate(prop = n / sum(n),total_n = sum(n), | |
| lower = binom.confint(x = n, n = total_n, method = "asymptotic")$lower, | |
| upper = binom.confint(x = n, n = total_n, method = "asymptotic")$upper) | |
| data |> | |
| group_by(pid3) |> | |
| count(bpsca, wt=weight) |> | |
| drop_na() |> | |
| mutate(prop = n / sum(n), | |
| total_n = sum(n), | |
| lower = binom.confint(x = n, n = total_n, method = "asymptotic")$lower, | |
| upper = binom.confint(x = n, n = total_n, method = "asymptotic")$upper) |> | |
| filter(pid3 %in% 1:3) | |
| data |> | |
| group_by(mormon) |> | |
| count(bpsca, wt=weight) |> | |
| drop_na() |> | |
| mutate( | |
| prop = n / sum(n), | |
| total_n = sum(n), | |
| lower = binom.confint(x = n, n = total_n, method = "asymptotic")$lower, | |
| upper = binom.confint(x = n, n = total_n, method = "asymptotic")$upper | |
| ) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| library(tidyverse) | |
| library(haven) | |
| library(sjlabelled) | |
| library(scales) | |
| # The gun control battery I'm interested in starts in 2013 | |
| # I want to create 5 variables: | |
| # 1. owngun (1 = someone in household owns a gun, 0 = No one in household owns a gun) | |
| # 2. favor_background_checks (1 = favor, 0 = oppose) on all gun sales | |
| # 3. favor_ban_assault_rifles (1 = favor, 0 = oppose) | |
| # 4. oppose_easy_permit (1 = favor, 0 = oppose) # Make it easier to obtain a conceal and carry permit | |
| # 5. bpsca (1 = favor, 0 = oppose) # Bipartisan Safer Communities Act | |
| final <- list() | |
| # 2013 | |
| data <- load('./data/CES/data/2013.RData') | |
| ls() | |
| data <- table | |
| names(data) | |
| final[['2013']] <- data |> | |
| mutate( | |
| id = paste0('2013X', caseid), | |
| owngun = NA, | |
| favor_background_checks = as.numeric(sjlabelled::as_numeric(data$CC13_320a)), | |
| favor_background_checks = ifelse(favor_background_checks == 2, 0, favor_background_checks), | |
| favor_background_checks = ifelse(favor_background_checks %in% 8:9, NA, favor_background_checks), | |
| favor_ban_assault_rifles = as.numeric(sjlabelled::as_numeric(data$CC13_320d)), | |
| favor_ban_assault_rifles = ifelse(favor_ban_assault_rifles == 2, 0, favor_ban_assault_rifles), | |
| favor_ban_assault_rifles = ifelse(favor_ban_assault_rifles %in% 8:9, NA, favor_ban_assault_rifles), | |
| oppose_easy_permit = as.numeric(sjlabelled::as_numeric(data$CC13_320e)), | |
| oppose_easy_permit = ifelse(oppose_easy_permit == 1, 0, oppose_easy_permit), | |
| oppose_easy_permit = ifelse(oppose_easy_permit == 2, 1, oppose_easy_permit), | |
| oppose_easy_permit = ifelse(oppose_easy_permit %in% 8:9, NA, oppose_easy_permit), | |
| bpsca = NA | |
| ) |> | |
| select(id, owngun, favor_background_checks, favor_ban_assault_rifles, oppose_easy_permit, bpsca) | |
| # 2014 | |
| data <- load('./data/CES/data/2014.RData') | |
| data <- x | |
| names(data) | |
| sjlabelled::get_labels(data$CC14_320a) | |
| final[['2014']] <- data |> | |
| mutate( | |
| id = paste0('2014X', V101), | |
| owngun = NA, | |
| favor_background_checks = as.numeric(sjlabelled::as_numeric(data$CC14_320a)), | |
| favor_background_checks = ifelse(favor_background_checks == 2, 0, favor_background_checks), | |
| favor_background_checks = ifelse(favor_background_checks %in% 3:4, NA, favor_background_checks), | |
| favor_ban_assault_rifles = as.numeric(sjlabelled::as_numeric(data$CC14_320d)), | |
| favor_ban_assault_rifles = ifelse(favor_ban_assault_rifles == 2, 0, favor_ban_assault_rifles), | |
| favor_ban_assault_rifles = ifelse(favor_ban_assault_rifles %in% 3:4, NA, favor_ban_assault_rifles), | |
| oppose_easy_permit = as.numeric(sjlabelled::as_numeric(data$CC14_320e)), | |
| oppose_easy_permit = ifelse(oppose_easy_permit == 1, 0, oppose_easy_permit), | |
| oppose_easy_permit = ifelse(oppose_easy_permit == 2, 1, oppose_easy_permit), | |
| oppose_easy_permit = ifelse(oppose_easy_permit %in% 3:4, NA, oppose_easy_permit), | |
| bpsca = NA | |
| ) |> | |
| select(id, owngun, favor_background_checks, favor_ban_assault_rifles, oppose_easy_permit, bpsca) | |
| # 2015 | |
| data <- load('./data/CES/data/2015.RData') | |
| data <- x | |
| names(data) | |
| sjlabelled::as_numeric(data$CC15_320a) | |
| final[['2015']] <- data |> | |
| mutate( | |
| id = paste0('2015X', V101), | |
| owngun = NA, | |
| favor_background_checks = as.numeric(sjlabelled::as_numeric(data$CC15_320a)), | |
| favor_background_checks = ifelse(favor_background_checks == 2, 0, favor_background_checks), | |
| favor_background_checks = ifelse(favor_background_checks %in% 3:4, NA, favor_background_checks), | |
| favor_ban_assault_rifles = as.numeric(sjlabelled::as_numeric(data$CC15_320c)), | |
| favor_ban_assault_rifles = ifelse(favor_ban_assault_rifles == 2, 0, favor_ban_assault_rifles), | |
| favor_ban_assault_rifles = ifelse(favor_ban_assault_rifles %in% 3:4, NA, favor_ban_assault_rifles), | |
| oppose_easy_permit = as.numeric(sjlabelled::as_numeric(data$CC15_320d)), | |
| oppose_easy_permit = ifelse(oppose_easy_permit == 1, 0, oppose_easy_permit), | |
| oppose_easy_permit = ifelse(oppose_easy_permit == 2, 1, oppose_easy_permit), | |
| oppose_easy_permit = ifelse(oppose_easy_permit %in% 3:4, NA, oppose_easy_permit), | |
| bpsca = NA | |
| ) |> | |
| select(id, owngun, favor_background_checks, favor_ban_assault_rifles, oppose_easy_permit, bpsca) | |
| # 2016 | |
| data <- load('./data/CES/data/2016.RData') | |
| data <- x | |
| names(data) | |
| final[['2016']] <- data |> | |
| mutate( | |
| id = paste0('2016X', V101), | |
| owngun = NA, | |
| favor_background_checks = as.numeric(sjlabelled::as_numeric(data$CC16_330a)), | |
| favor_background_checks = ifelse(favor_background_checks == 2, 0, favor_background_checks), | |
| favor_background_checks = ifelse(favor_background_checks %in% 3:4, NA, favor_background_checks), | |
| favor_ban_assault_rifles = as.numeric(sjlabelled::as_numeric(data$CC16_330d)), | |
| favor_ban_assault_rifles = ifelse(favor_ban_assault_rifles == 2, 0, favor_ban_assault_rifles), | |
| favor_ban_assault_rifles = ifelse(favor_ban_assault_rifles %in% 3:4, NA, favor_ban_assault_rifles), | |
| oppose_easy_permit = as.numeric(sjlabelled::as_numeric(data$CC16_330e)), | |
| oppose_easy_permit = ifelse(oppose_easy_permit == 1, 0, oppose_easy_permit), | |
| oppose_easy_permit = ifelse(oppose_easy_permit == 2, 1, oppose_easy_permit), | |
| oppose_easy_permit = ifelse(oppose_easy_permit %in% 3:4, NA, oppose_easy_permit), | |
| bpsca = NA | |
| ) |> | |
| select(id, owngun, favor_background_checks, favor_ban_assault_rifles, oppose_easy_permit, bpsca) | |
| # 2017 | |
| data <- load('./data/CES/data/2017.RData') | |
| ls() | |
| data <- table | |
| names(data) | |
| final[['2017']] <- data |> | |
| mutate( | |
| id = paste0('2017X', V101), | |
| owngun = NA, | |
| favor_background_checks = as.numeric(sjlabelled::as_numeric(data$CC17_330a)), | |
| favor_background_checks = ifelse(favor_background_checks == 2, 0, favor_background_checks), | |
| favor_background_checks = ifelse(favor_background_checks %in% 8:9, NA, favor_background_checks), | |
| favor_ban_assault_rifles = as.numeric(sjlabelled::as_numeric(data$CC17_330c)), | |
| favor_ban_assault_rifles = ifelse(favor_ban_assault_rifles == 2, 0, favor_ban_assault_rifles), | |
| favor_ban_assault_rifles = ifelse(favor_ban_assault_rifles %in% 8:9, NA, favor_ban_assault_rifles), | |
| oppose_easy_permit = as.numeric(sjlabelled::as_numeric(data$CC17_330d)), | |
| oppose_easy_permit = ifelse(oppose_easy_permit == 1, 0, oppose_easy_permit), | |
| oppose_easy_permit = ifelse(oppose_easy_permit == 2, 1, oppose_easy_permit), | |
| oppose_easy_permit = ifelse(oppose_easy_permit %in% 8:9, NA, oppose_easy_permit), | |
| bpsca = NA | |
| ) |> | |
| select(id, owngun, favor_background_checks, favor_ban_assault_rifles, oppose_easy_permit, bpsca) | |
| # 2018 | |
| data <- load('./data/CES/data/2018.RData') | |
| data <- x | |
| names(data) | |
| final[['2018']] <- data |> | |
| mutate( | |
| id = paste0('2018X', caseid), | |
| owngun = NA, | |
| favor_background_checks = as.numeric(sjlabelled::as_numeric(data$CC18_320a)), | |
| favor_background_checks = ifelse(favor_background_checks == 2, 0, favor_background_checks), | |
| favor_background_checks = ifelse(favor_background_checks %in% 8:9, NA, favor_background_checks), | |
| favor_ban_assault_rifles = as.numeric(sjlabelled::as_numeric(data$CC18_320c)), | |
| favor_ban_assault_rifles = ifelse(favor_ban_assault_rifles == 2, 0, favor_ban_assault_rifles), | |
| favor_ban_assault_rifles = ifelse(favor_ban_assault_rifles %in% 8:9, NA, favor_ban_assault_rifles), | |
| oppose_easy_permit = as.numeric(sjlabelled::as_numeric(data$CC18_320d)), | |
| oppose_easy_permit = ifelse(oppose_easy_permit == 1, 0, oppose_easy_permit), | |
| oppose_easy_permit = ifelse(oppose_easy_permit == 2, 1, oppose_easy_permit), | |
| oppose_easy_permit = ifelse(oppose_easy_permit %in% 8:9, NA, oppose_easy_permit), | |
| bpsca = NA | |
| ) |> | |
| select(id, owngun, favor_background_checks, favor_ban_assault_rifles, oppose_easy_permit, bpsca) | |
| # 2019 | |
| data <- load('./data/CES/data/2019.RData') | |
| ls() | |
| data <- table | |
| names(data) | |
| final[['2019']] <- data |> | |
| mutate( | |
| id = paste0('2019X', caseid), | |
| owngun = NA, | |
| favor_background_checks = as.numeric(sjlabelled::as_numeric(data$CC19_320a)), | |
| favor_background_checks = ifelse(favor_background_checks == 2, 0, favor_background_checks), | |
| favor_background_checks = ifelse(favor_background_checks %in% 8:9, NA, favor_background_checks), | |
| favor_ban_assault_rifles = as.numeric(sjlabelled::as_numeric(data$CC19_320c)), | |
| favor_ban_assault_rifles = ifelse(favor_ban_assault_rifles == 2, 0, favor_ban_assault_rifles), | |
| favor_ban_assault_rifles = ifelse(favor_ban_assault_rifles %in% 8:9, NA, favor_ban_assault_rifles), | |
| oppose_easy_permit = as.numeric(sjlabelled::as_numeric(data$CC19_320d)), | |
| oppose_easy_permit = ifelse(oppose_easy_permit == 1, 0, oppose_easy_permit), | |
| oppose_easy_permit = ifelse(oppose_easy_permit == 2, 1, oppose_easy_permit), | |
| oppose_easy_permit = ifelse(oppose_easy_permit %in% 8:9, NA, oppose_easy_permit), | |
| bpsca = NA | |
| ) |> | |
| select(id, owngun, favor_background_checks, favor_ban_assault_rifles, oppose_easy_permit, bpsca) | |
| # 2020 | |
| data <- haven::read_dta('./data/CES/data/2020.dta') | |
| names(data) | |
| final[['2020']] <- data |> | |
| mutate( | |
| id = paste0('2020X', caseid), | |
| owngun = dplyr::case_when( | |
| sjlabelled::as_numeric(data$gunown) %in% 1:2 ~ "Gun in household", | |
| sjlabelled::as_numeric(data$gunown) == 3 ~ "No gun in household", | |
| sjlabelled::as_numeric(data$gunown) == 8 ~ "Unsure", | |
| TRUE ~ NA_character_ | |
| ), | |
| owngun = factor(owngun, levels = c("Gun in household", "No gun in household", "Unsure")), | |
| favor_background_checks = NA, | |
| favor_ban_assault_rifles = as.numeric(sjlabelled::as_numeric(data$CC20_330b)), | |
| favor_ban_assault_rifles = ifelse(favor_ban_assault_rifles == 2, 0, favor_ban_assault_rifles), | |
| favor_ban_assault_rifles = ifelse(favor_ban_assault_rifles %in% 8:9, NA, favor_ban_assault_rifles), | |
| oppose_easy_permit = as.numeric(sjlabelled::as_numeric(data$CC20_330c)), | |
| oppose_easy_permit = ifelse(oppose_easy_permit == 1, 0, oppose_easy_permit), | |
| oppose_easy_permit = ifelse(oppose_easy_permit == 2, 1, oppose_easy_permit), | |
| oppose_easy_permit = ifelse(oppose_easy_permit %in% 8:9, NA, oppose_easy_permit), | |
| bpsca = NA | |
| ) |> | |
| select(id, owngun, favor_background_checks, favor_ban_assault_rifles, oppose_easy_permit, bpsca) | |
| # 2021 | |
| data <- load('./data/CES/data/2021.RData') | |
| ls() | |
| data <- table | |
| names(data) | |
| final[['2021']] <- data |> | |
| mutate( | |
| id = paste0('2021X', caseid), | |
| owngun = NA, | |
| favor_background_checks = as.numeric(sjlabelled::as_numeric(data$CC21_321f)), | |
| favor_background_checks = ifelse(favor_background_checks == 2, 0, favor_background_checks), | |
| favor_background_checks = ifelse(favor_background_checks %in% 8:9, NA, favor_background_checks), | |
| favor_ban_assault_rifles = as.numeric(sjlabelled::as_numeric(data$CC21_321a)), | |
| favor_ban_assault_rifles = ifelse(favor_ban_assault_rifles == 2, 0, favor_ban_assault_rifles), | |
| favor_ban_assault_rifles = ifelse(favor_ban_assault_rifles %in% 8:9, NA, favor_ban_assault_rifles), | |
| oppose_easy_permit = as.numeric(sjlabelled::as_numeric(data$CC21_321b)), | |
| oppose_easy_permit = ifelse(oppose_easy_permit == 1, 0, oppose_easy_permit), | |
| oppose_easy_permit = ifelse(oppose_easy_permit == 2, 1, oppose_easy_permit), | |
| oppose_easy_permit = ifelse(oppose_easy_permit %in% 8:9, NA, oppose_easy_permit), | |
| bpsca = NA | |
| ) |> | |
| select(id, owngun, favor_background_checks, favor_ban_assault_rifles, oppose_easy_permit, bpsca) | |
| # 2022 | |
| data <- haven::read_dta('./data/CES/data/2022.dta') | |
| names(data) | |
| final[['2022']] <- data |> | |
| mutate( | |
| id = paste0('2022X', caseid), | |
| owngun = dplyr::case_when( | |
| sjlabelled::as_numeric(data$gunown) %in% 1:2 ~ "Gun in household", | |
| sjlabelled::as_numeric(data$gunown) == 3 ~ "No gun in household", | |
| sjlabelled::as_numeric(data$gunown) == 8 ~ "Unsure", | |
| TRUE ~ NA_character_ | |
| ), | |
| owngun = factor(owngun, levels = c("Gun in household", "No gun in household", "Unsure")), | |
| favor_background_checks = as.numeric(sjlabelled::as_numeric(data$CC22_330e)), | |
| favor_background_checks = ifelse(favor_background_checks == 2, 0, favor_background_checks), | |
| favor_background_checks = ifelse(favor_background_checks %in% 8:9, NA, favor_background_checks), | |
| favor_ban_assault_rifles = as.numeric(sjlabelled::as_numeric(data$CC22_330b)), | |
| favor_ban_assault_rifles = ifelse(favor_ban_assault_rifles == 2, 0, favor_ban_assault_rifles), | |
| favor_ban_assault_rifles = ifelse(favor_ban_assault_rifles %in% 8:9, NA, favor_ban_assault_rifles), | |
| oppose_easy_permit = as.numeric(sjlabelled::as_numeric(data$CC22_330c)), | |
| oppose_easy_permit = ifelse(oppose_easy_permit == 1, 0, oppose_easy_permit), | |
| oppose_easy_permit = ifelse(oppose_easy_permit == 2, 1, oppose_easy_permit), | |
| oppose_easy_permit = ifelse(oppose_easy_permit %in% 8:9, NA, oppose_easy_permit), | |
| bpsca = NA | |
| ) |> | |
| select(id, owngun, favor_background_checks, favor_ban_assault_rifles, oppose_easy_permit, bpsca) | |
| # 2023 | |
| data <- haven::read_dta('./data/CES/data/2023.dta') | |
| names(data) | |
| final[['2023']] <- data |> | |
| mutate( | |
| id = paste0('2023X', caseid), | |
| owngun = NA, | |
| favor_background_checks = as.numeric(sjlabelled::as_numeric(data$CC23_321c)), | |
| favor_background_checks = ifelse(favor_background_checks == 2, 0, favor_background_checks), | |
| favor_background_checks = ifelse(favor_background_checks %in% 8:9, NA, favor_background_checks), | |
| favor_ban_assault_rifles = as.numeric(sjlabelled::as_numeric(data$CC23_321a)), | |
| favor_ban_assault_rifles = ifelse(favor_ban_assault_rifles == 2, 0, favor_ban_assault_rifles), | |
| favor_ban_assault_rifles = ifelse(favor_ban_assault_rifles %in% 8:9, NA, favor_ban_assault_rifles), | |
| oppose_easy_permit = as.numeric(sjlabelled::as_numeric(data$CC23_321b)), | |
| oppose_easy_permit = ifelse(oppose_easy_permit == 1, 0, oppose_easy_permit), | |
| oppose_easy_permit = ifelse(oppose_easy_permit == 2, 1, oppose_easy_permit), | |
| oppose_easy_permit = ifelse(oppose_easy_permit %in% 8:9, NA, oppose_easy_permit), | |
| bpsca = as.numeric(sjlabelled::as_numeric(data$CC23_340e)), | |
| bpsca = ifelse(bpsca == 2, 0, bpsca), | |
| bpsca = ifelse(bpsca %in% 8:9, NA, bpsca) | |
| ) |> | |
| select(id, owngun, favor_background_checks, favor_ban_assault_rifles, oppose_easy_permit, bpsca) | |
| # 2024 | |
| data <- haven::read_dta('./data/CES/data/2024.dta', encoding = 'UTF-8') | |
| names(data) | |
| final[['2024']] <- data |> | |
| mutate( | |
| id = paste0('2024X', caseid), | |
| owngun = NA, | |
| favor_background_checks = as.numeric(sjlabelled::as_numeric(data$CC24_321c)), | |
| favor_background_checks = ifelse(favor_background_checks == 2, 0, favor_background_checks), | |
| favor_background_checks = ifelse(favor_background_checks %in% 8:9, NA, favor_background_checks), | |
| favor_ban_assault_rifles = as.numeric(sjlabelled::as_numeric(data$CC24_321a)), | |
| favor_ban_assault_rifles = ifelse(favor_ban_assault_rifles == 2, 0, favor_ban_assault_rifles), | |
| favor_ban_assault_rifles = ifelse(favor_ban_assault_rifles %in% 8:9, NA, favor_ban_assault_rifles), | |
| oppose_easy_permit = as.numeric(sjlabelled::as_numeric(data$CC24_321b)), | |
| oppose_easy_permit = ifelse(oppose_easy_permit == 1, 0, oppose_easy_permit), | |
| oppose_easy_permit = ifelse(oppose_easy_permit == 2, 1, oppose_easy_permit), | |
| oppose_easy_permit = ifelse(oppose_easy_permit %in% 8:9, NA, oppose_easy_permit), | |
| bpsca = as.numeric(sjlabelled::as_numeric(data$CC24_321f)), | |
| bpsca = ifelse(bpsca == 2, 0, bpsca), | |
| bpsca = ifelse(bpsca %in% 8:9, NA, bpsca) | |
| ) |> | |
| select(id, owngun, favor_background_checks, favor_ban_assault_rifles, oppose_easy_permit, bpsca) | |
| # Combine all years into a single data frame | |
| combined_data <- bind_rows(final, .id = 'year') | |
| write.csv(combined_data, 'data/CES/gun_control.csv') |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment