Skip to content
Mapping with R has been completely revamped. Check it out →
R for the Rest of Us Logo

Going Deeper with R

Exporting Data

Transcript

Click on the transcript to go to that point in the video. Please note that transcripts are auto generated and may contain minor inaccuracies.

View code shown in video
# Load Packages -----------------------------------------------------------

library(tidyverse)
library(fs)
library(readxl)
library(janitor)

# Create Directories ------------------------------------------------------

dir_create("data-raw")
dir_create("data")

# Download Data -----------------------------------------------------------

# https://www.oregon.gov/ode/educator-resources/assessment/Pages/Assessment-Group-Reports.aspx

# download.file("https://www.oregon.gov/ode/educator-resources/assessment/Documents/TestResults2122/pagr_schools_math_tot_raceethnicity_2122.xlsx",
#               mode = "wb",
#               destfile = "data-raw/pagr_schools_math_tot_raceethnicity_2122.xlsx")
# 
# download.file("https://www.oregon.gov/ode/educator-resources/assessment/Documents/TestResults2122/TestResults2019/pagr_schools_math_tot_raceethnicity_1819.xlsx",
#               mode = "wb",
#               destfile = "data-raw/pagr_schools_math_tot_raceethnicity_1819.xlsx")
# 
# download.file("https://www.oregon.gov/ode/educator-resources/assessment/TestResults2018/pagr_schools_math_raceethnicity_1718.xlsx",
#               mode = "wb",
#               destfile = "data-raw/pagr_schools_math_raceethnicity_1718.xlsx")
# 
# download.file("https://www.oregon.gov/ode/educator-resources/assessment/TestResults2017/pagr_schools_math_raceethnicity_1617.xlsx",
#               mode = "wb",
#               destfile = "data-raw/pagr_schools_math_raceethnicity_1617.xlsx")
# 
# download.file("https://www.oregon.gov/ode/educator-resources/assessment/TestResults2016/pagr_schools_math_raceethnicity_1516.xlsx",
#               mode = "wb",
#               destfile = "data-raw/pagr_schools_math_raceethnicity_1516.xlsx")
#
# download.file("https://github.com/rfortherestofus/going-deeper-v2/raw/main/data-raw/oregon-districts-and-schools.xlsx",
#               mode = "wb",
#               destfile = "data-raw/oregon-districts-and-schools.xlsx")

# Import, Tidy, and Clean Data --------------------------------------------

oregon_districts_and_schools <- 
  read_excel("data-raw/oregon-districts-and-schools.xlsx") |> 
  clean_names() |> 
  rename(school_id = attending_school_institutional_id)

clean_math_proficiency_data <- function(raw_data) {
  
  read_excel(path = raw_data) |> 
    clean_names() |> 
    filter(student_group == "Total Population (All Students)") |> 
    filter(grade_level == "Grade 3") |> 
    select(academic_year, school_id, contains("number_level")) |> 
    pivot_longer(cols = starts_with("number_level"),
                 names_to = "proficiency_level",
                 values_to = "number_of_students") |> 
    mutate(proficiency_level = case_when(
      proficiency_level == "number_level_4" ~ "4",
      proficiency_level == "number_level_3" ~ "3",
      proficiency_level == "number_level_2" ~ "2",
      proficiency_level == "number_level_1" ~ "1"
    )) |> 
    mutate(number_of_students = parse_number(number_of_students)) |> 
    group_by(school_id) |> 
    mutate(pct = number_of_students / sum(number_of_students, na.rm = TRUE)) |> 
    ungroup()
  
}

third_grade_math_proficiency_2021_2022 <-
  clean_math_proficiency_data(raw_data = "data-raw/pagr_schools_math_tot_raceethnicity_2122.xlsx")

third_grade_math_proficiency_2018_2019 <-
  clean_math_proficiency_data(raw_data = "data-raw/pagr_schools_math_tot_raceethnicity_1819.xlsx")


third_grade_math_proficiency <- 
  bind_rows(third_grade_math_proficiency_2018_2019,
            third_grade_math_proficiency_2021_2022) |> 
  left_join(oregon_districts_and_schools,
            join_by(school_id))


# Export ------------------------------------------------------------------

third_grade_math_proficiency |> 
  write_csv(file = "data/third_grade_math_proficiency.csv")

third_grade_math_proficiency |> 
  write_rds(file = "data/third_grade_math_proficiency.rds")

Your Turn

  1. Make a data folder using the dir_create() function from the fs package.

  2. Export the enrollment_by_race_ethnicity data frame as an RDS file in the data folder.

Have any questions? Put them below and we will help you out!

You need to be signed-in to comment on this post. Login.

Mike LeVan

Mike LeVan • April 25, 2025

Hey. Thinking about when you made the mistake where you used write_csv and accidentally wrote it to an RDS file. I tried to re-create this to see what was happening.

The command created the file "enrollment_by_race_ethnicity.rds" file, but it was the same size as the "enrollment_be_race_ethnicity.csv" file. (165.9kb)

I could open the CSV file and view it as one normally would, but when I clicked on the RDS file and tried to open it I got a dialog box asking me to load the file in an R Object. So I couldn't just view it as a typical CSV file.

I then renamed the RDS file to "enrollment_by_race_ethnicity2.csv" and I could then view it as a CSV file.

So I think the write_csv command was creating a CSV file regardless of the name you gave it, but because you gave it the extension RDS, R Studio treats it as an RDS file instead of a CSV file.

I then used the write_rds command to create "enrollment_by_race_ethnicy.rds". This file was a different size (204.6kb), which makes sense since it contains the extra information not kept by a CSV file.

Am I understanding this correctly?

Gracielle Higino

Gracielle Higino Coach • May 1, 2025

Yes, you're right! The thing is that all these files are plain text files, not binaries. So technically you can also open an RDS file using a text-reading software, such as Excel, Word or NotePad - it'd just be hard to understand because of the encoding. The difference here is that write_rds() adds information, as you said, and it can contain more than one R object. The write_csv() function, on the other hand, just writes delimited text files, one R object at a time, based on the vroom_write() function.

Course Content

44 Lessons