Warning: package 'tidyverse' was built under R version 4.2.3
Warning: package 'ggplot2' was built under R version 4.2.3
Warning: package 'tibble' was built under R version 4.2.3
Warning: package 'tidyr' was built under R version 4.2.3
Warning: package 'readr' was built under R version 4.2.3
Warning: package 'purrr' was built under R version 4.2.3
Warning: package 'dplyr' was built under R version 4.2.3
Warning: package 'stringr' was built under R version 4.2.3
Warning: package 'forcats' was built under R version 4.2.3
Warning: package 'lubridate' was built under R version 4.2.3
── 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.1
✔ 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(readxl)
Warning: package 'readxl' was built under R version 4.2.3
library(plotly)
Warning: package 'plotly' was built under R version 4.2.3
Attaching package: 'plotly'
The following object is masked from 'package:ggplot2':
last_plot
The following object is masked from 'package:stats':
filter
The following object is masked from 'package:graphics':
layout
survey <-read_excel("GSS.xlsx")
##Question 1
I performed a quick check to remove the extra variables, and created a histogram for race.
survey |>count(race)
# A tibble: 4 × 2
race n
<chr> <int>
1 .i: Inapplicable 53
2 Black 975
3 Other 579
4 White 4702
Same process as age, this time for the variable “spanking”.
survey |>count(spanking)
# A tibble: 8 × 2
spanking n
<chr> <int>
1 .d: Do not Know/Cannot Choose 29
2 .i: Inapplicable 3025
3 .n: No answer 5
4 .s: Skipped on Web 7
5 AGREE 1274
6 DISAGREE 810
7 STRONGLY AGREE 706
8 STRONGLY DISAGREE 453
survey |>mutate(spanking =as_factor(spanking)) |>mutate(spanking =fct_recode(spanking,NULL =".d: Do not Know/Cannot Choose",NULL =".i: Inapplicable",NULL =".n: No answer",NULL =".s: Skipped on Web")) |>drop_na(spanking) |>mutate(spanking =fct_infreq(spanking)) |>plot_ly(x =~spanking) |>add_histogram()
##Question 3
I combined the code for both “age” and “spanking” into a single box plot, with the variable “spanking” first being transformed into numerical data (1 being Strongly Disagree, 4 being Strongly Agree).
survey |>mutate(spanking =as_factor(spanking)) |>mutate(spanking =fct_recode(spanking,NULL =".d: Do not Know/Cannot Choose",NULL =".i: Inapplicable",NULL =".n: No answer",NULL =".s: Skipped on Web")) |>mutate(spanking =fct_relevel(spanking,c("STRONGLY DISAGREE","DISAGREE","AGREE","STRONGLY AGREE"))) |>drop_na(spanking) |>mutate(spanking =as.numeric(spanking)) |>mutate(race =as_factor(race)) |>mutate(race =fct_recode(race,NULL =".i: Inapplicable")) |>drop_na(race) |>mutate(race =fct_infreq(race)) |>plot_ly(x =~race, y =~spanking) |>add_boxplot()
##Question 4
I had a hard time with this question at first, but after checking the code, I realized I wrote “8 or more” = “8” which is in the opposite order. I finally found the solution by looking back at the original example and some help online, but it costed me a lot of time.
survey |>count(childs)
# A tibble: 11 × 2
childs n
<chr> <int>
1 .d: Do not Know/Cannot Choose 5
2 .i: Inapplicable 11
3 0 1906
4 1 1014
5 2 1571
6 3 1000
7 4 430
8 5 169
9 6 81
10 7 47
11 8 or more 75
survey |>mutate(childs =fct_recode(childs,"8"="8 or more",NULL =".d: Do not Know/Cannot Choose",NULL =".i: Inapplicable")) |>drop_na(childs) |>mutate(childs =as.numeric(as.character(childs))) |>plot_ly(x =~childs) |>add_histogram()
##Question 5
With the issue resolved, I combined the data for the “spanking” and “childs” variables to form a box plot similar to question 3.
survey |>mutate(spanking =as_factor(spanking)) |>mutate(spanking =fct_recode(spanking,NULL =".d: Do not Know/Cannot Choose",NULL =".i: Inapplicable",NULL =".n: No answer",NULL =".s: Skipped on Web")) |>drop_na(spanking) |>mutate(spanking =fct_infreq(spanking)) |>mutate(spanking =as_factor(spanking)) |>mutate(childs =fct_recode(childs,"8"="8 or more",NULL =".d: Do not Know/Cannot Choose",NULL =".i: Inapplicable")) |>drop_na(childs) |>mutate(childs =as.numeric(as.character(childs))) |>plot_ly(x =~spanking, y =~childs) |>add_boxplot()
##Question 6
The variable “hapmar” was treated similarly to questions 1 and 2.
survey |>count(hapmar)
# A tibble: 7 × 2
hapmar n
<chr> <int>
1 .d: Do not Know/Cannot Choose 2
2 .i: Inapplicable 4234
3 .n: No answer 12
4 .s: Skipped on Web 3
5 NOT TOO HAPPY 90
6 PRETTY HAPPY 717
7 VERY HAPPY 1251
survey |>mutate(hapmar =as_factor(hapmar)) |>mutate(hapmar =fct_recode(hapmar,NULL =".d: Do not Know/Cannot Choose",NULL =".i: Inapplicable",NULL =".n: No answer",NULL =".s: Skipped on Web")) |>drop_na(hapmar) |>mutate(hapmar =fct_infreq(hapmar)) |>plot_ly(x =~hapmar) |>add_histogram()
##Question 7
Same as above, but for the variable “class_” and reordered from lower to upper class. (I renamed the variable to make it more simple.)
survey |>count(class_)
# A tibble: 7 × 2
class_ n
<chr> <int>
1 .d: Do not Know/Cannot Choose 36
2 .n: No answer 12
3 .s: Skipped on Web 7
4 Lower class 547
5 Middle class 2749
6 Upper class 256
7 Working class 2702
survey |>mutate(class =as_factor(class_)) |>mutate(class =fct_recode(class,NULL =".d: Do not Know/Cannot Choose",NULL =".n: No answer",NULL =".s: Skipped on Web")) |>mutate(class =fct_relevel(class,c("Lower class","Working class","Middle class","Upper class"))) |>drop_na(class) |>plot_ly(x =~class) |>add_histogram()
##Question 8
I combined the variables “class” and “hapmar” to create a histogram, with “hapmar” separating each class by color.
survey |>mutate(class =as_factor(class_)) |>mutate(class =fct_recode(class,NULL =".d: Do not Know/Cannot Choose",NULL =".n: No answer",NULL =".s: Skipped on Web")) |>mutate(class =fct_relevel(class,c("Lower class","Working class","Middle class","Upper class"))) |>drop_na(class) |>mutate(hapmar =as_factor(hapmar)) |>mutate(hapmar =fct_recode(hapmar,NULL =".d: Do not Know/Cannot Choose",NULL =".i: Inapplicable",NULL =".n: No answer",NULL =".s: Skipped on Web")) |>drop_na(hapmar) |>mutate(hapmar =fct_infreq(hapmar)) |>plot_ly(x =~class, color =~hapmar) |>add_histogram()
##Question 9
I didn’t know if there was a way to collapse groups of numbers, so I typed them out individually. Please let me know if there was an easier way to do this.
survey |>count(age)
# A tibble: 73 × 2
age n
<chr> <int>
1 .n: No answer 222
2 18 26
3 19 54
4 20 80
5 21 86
6 22 92
7 23 121
8 24 103
9 25 106
10 26 112
# ℹ 63 more rows
survey |>mutate(age =as_factor(age)) |>mutate(age =fct_recode(age,NULL =".n: No answer")) |>mutate(age =fct_collapse(age,"Under 30"=c(18,19,20,21,22,23,24,25,26,27,28,29),"30s"=c(30,31,32,33,34,35,36,37,38,39),"40s"=c(40,41,42,43,44,45,46,47,48,49),"50s"=c(50,51,52,53,54,55,56,57,58,59),"60s"=c(60,61,62,63,64,65,66,67,68,69),"70s"=c(70,71,72,73,74,75,76,77,78,79),"80 and up"=c(80,81,82,83,84,85,86,87,88,"89 or older"))) |>drop_na(age) |>plot_ly(x =~age) |>add_histogram()
##Question 10
Lastly, I combined the variables “age” and “hapmar” to create a heatmap.
survey |>mutate(age =as_factor(age)) |>mutate(age =fct_recode(age,NULL =".n: No answer")) |>mutate(age =fct_collapse(age,"Under 30"=c(18,19,20,21,22,23,24,25,26,27,28,29),"30s"=c(30,31,32,33,34,35,36,37,38,39),"40s"=c(40,41,42,43,44,45,46,47,48,49),"50s"=c(50,51,52,53,54,55,56,57,58,59),"60s"=c(60,61,62,63,64,65,66,67,68,69),"70s"=c(70,71,72,73,74,75,76,77,78,79),"80 and up"=c(80,81,82,83,84,85,86,87,88,"89 or older"))) |>drop_na(age) |>mutate(hapmar =as_factor(hapmar)) |>mutate(hapmar =fct_recode(hapmar,NULL =".d: Do not Know/Cannot Choose",NULL =".i: Inapplicable",NULL =".n: No answer",NULL =".s: Skipped on Web")) |>drop_na(hapmar) |>mutate(hapmar =fct_infreq(hapmar)) |>plot_ly(x =~hapmar, y =~age) |>add_histogram2d()