R in 3 Months Week 2 (Data Wrangling and Analysis)

What is the most surprising thing about R so far?

Please put your answer in the chat!

Agenda

  1. Housekeeping

  2. Review of {dplyr} Functions

  3. Common Issues and Your Questions

  4. Next Week

Housekeeping

Project Assignments

  • If you submitted a project assignment, you should receive an email notification when I give you feedback

  • I can answer questions relevant to the topic of the week, but can’t answer everything for you

  • Instead, I will share resources with you where applicable

Datasets

Co-Working Session

Cheatsheets

Review of Functions

select()

mutate()

filter()

summarize()

group_by() |> summarize()

arrange()

Common Issues and Your Questions

The .by argument in summarize()

An observation that I am curious about: The group_by with two variables appears to sort the tibble by the first variable alphabetically (island), while the alternative method David showed (i.e., the .by) sorts it by the year in the tibble. Is this always the case or was this simply by chance that this change in sorting of the summary tibble occured?

Assessment break

Which function would you use to keep only certain rows in your data?

  1. filter()
  2. select()
  3. mutate()
  4. arrange()

Assessment break

Which function would you use to keep only certain rows in your data?

  1. filter()
  2. select()
  3. mutate()
  4. arrange()

How to Import Excel Files

A note on encoding

Packages

Install packages once per computer

install.packages("tidyverse")


Load packages once per session

library(tidyverse)

Projects

I started this video after I closed and reopened Positron, so there is no folder open. There is a message on the left reminding me that no folder is open and asking me to open a folder. Is opening a folder always the first step?

Working directories

  • Positron (and RStudio) projects set your working directory to be the root of the project

  • Using a project, you only need to use relative file paths, not absolute file paths

  • This is easier to type and more reproducible

Parentheses matter (a lot!)

What’s the logic for the “-” (minus) in the second solution below being in its own parenthesis but it’s not in the first solution? That tripped me up.

penguins |>
  select(-species)
penguins |>
  select(-(bill_length_mm:body_mass_g))

Parentheses matter (a lot!)

penguins |>
  select(-bill_length_mm:body_mass_g)

The code above is parsed as:

(-bill_length_mm):body_mass_g
  1. “every column except bill_length_mm”, which is positions c(1, 2, 4, 5, 6, 7, 8). That’s 7 elements.
  2. body_mass_g evaluates to position 6.
  3. The : operator only uses the first element of each side, resulting in select(1:6).

Assessment break

A relative path can continue to work when an R project is moved to another computer, provided the project’s internal folder structure stays the same.

  1. TRUE

  2. FALSE

Assessment break

A relative path can continue to work when an R project is moved to another computer, provided the project’s internal folder structure stays the same.

  1. TRUE

  2. FALSE

How R handles NA values

  • SPSS has named NA values

  • In R, a value is only NA if it shows up in red (in the console) or light gray (in the data viewer)

How R handles NA values

You’ll learn later to use functions from the {tidyr} package to deal with missing values:

  • replace_na() will replace existing NA values with your chosen values

  • na_if() will replace values you specify with NA

NA values

Is there some way to change the default behavior of summarize so that it ignores NAs without having to specify it specifically? I didn’t know if there was something like a global variable that you can set in the R script file, or something within the RStudio environment or installed package?

Quotes

Needed to refer to non-existent things

install.packages("tidyverse")

Not needed to refer to existing things

library(tidyverse)


penguins |>
  select(island)

Needed when you’re referring to text

penguins |>
  filter(island == "Torgersen")

Or the name of a file

penguins <- read_csv(file = "data-raw/penguins.csv")

Rounding

I went a step further by wanting to round my average and drop the decimals (I noticed some decimal places in my answer). I used mutate and round to change it, but is there any easier or simpler way to format it?

penguins |>
  filter(island == "Biscoe") |>
  drop_na(body_mass_g, sex) |>
  group_by(sex) |>
  summarize(mean_body_mass = mean(body_mass_g)) |>
  mutate(mean_body_mass = round(mean_body_mass, digits = 0))

Typos happen to everone

Typos happen to everone

get_acs(
  year = 2019,
  geography = "county",
  geometry = TRUE,
  state = "OR",
  variables = "B01003_001"
) |>
  clean_names() |>
  mutate(name = str_remove(name, " County")) |>
  rename(
    poulation = estimate,
    county = name
  ) |>
  select(county, population)

Next Week

  1. Course assignment: complete data viz lessons

  2. Project assignment: make three plots from your data