packages = c(
  "dplyr","ggplot2","stringr", "dslabs", "readr", "tidyr", "purrr",
  "lubridate", "readxl"
  )
existing = as.character(installed.packages()[,1])
for(pkg in packages[!(packages %in% existing)]) install.packages(pkg)
rm(list=ls(all=T))
Sys.setlocale("LC_ALL","C")
options(digits=4, scipen=12)
library(readr)
library(readxl)
library(dplyr)
library(ggplot2)
library(stringr)
library(lubridate)
library(tidyr)
library(dslabs)

A. Data Import

A1. Import Spreadsheets

Q1: Which of the following is NOT part of the data wranging process?

  • Checking correlations between your variables

Q2: Which files could be opened in a basic text editor?

  • data.txt
  • data.csv
  • data.tsv

Q3: You open the file in a basic text editor and see lines that look like the following:

read.table("data/initials.txt", header=T, sep=",")
  initials state age time
1      vib    MA  61 6:01
2      adc    TX  45 5:45
3      kme    CT  50 4:19

What type of file is this?

  • A comma-delimited file with a header
A2. Paths and the Working Directory

Q1: Assume the following is the full path to the directory that a student wants to use as their working directory in R: “/Users/student/Documents/projects/”

Which of the following lines of code CANNOT set the working directory to the desired “projects” directory?

setwd(/Users/student/Documents/projects/)

Q2: We want to copy the “murders.csv” file from the dslabs package into an existing folder “data”, which is located in our HarvardX-Wrangling projects folder. We first enter the code below into our RStudio console.

library(dslabs)
wd = getwd()
filename = "murders.csv"
path = system.file("extdata", package = "dslabs")

Which of the following commands would NOT successfully copy “murders.csv” into the folder “data”?

file.copy(file.path(path, "murders.csv"), getwd())
[1] FALSE

It copies the file into the working directory, not into the “data” folder

A3. The readr and readxl Packages

Q1: You are not sure whether the murders.csv file has a header row. How could you check this?

  • Open the file in a basic text editor.
  • In the RStudio “Files” pane, click on your file, then select “View File”.
  • Use the command read_lines (remembering to specify the number of rows with the n_max argument).

Q2: What is one difference between read_excel and read_xlsx?

  • Read_excel reads both .xls and .xlsx files by detecting the file format from its extension, while read_xlsx only reads .xlsx files.

Q3: You have a file called “times.txt” that contains race finish times for a marathon. The first four lines of the file look like this:

Which line of code will NOT produce a tibble with column names “initials”, “state”, “age”, and “time”?

race_times <- read.csv("data/times.txt")
race_times
  initials state age time
1      vib    MA  61 6:01
2      adc    TX  45 5:45
3      kme    CT  50 4:19
class(race_times)
[1] "data.frame"

Instead of “tibble”, it produces a data frame.

Q4: You also have access to marathon finish times in the form of an Excel document named “times.xlsx”. In the Excel document, different sheets contain race information for different years. The first sheet is named “2015”, the second is named “2016”, and the third is named “2017”.

Which line of code will NOT import the data contained in the “2016” tab of this Excel sheet?

library(readxl)
times_2016 <- read_xlsx("times.xlsx", sheet = "2")
A4. Importing Data Using R-base Functions

Q1: You have a comma-separated values file that contains the initials, home states, ages, and race finish times for marathon runners. The runners’ initials contain three characters for the runners’ first, middle, and last names (for example, “KME”).

You read in the file using the following code.

race_times <- read.csv("data/times.txt")

What is the data type of the initials in the object race_times?

str(race_times)
'data.frame':   3 obs. of  4 variables:
 $ initials: Factor w/ 3 levels "adc","kme","vib": 3 1 2
 $ state   : Factor w/ 3 levels "CT","MA","TX": 2 3 1
 $ age     : int  61 45 50
 $ time    : Factor w/ 3 levels "4:19","5:45",..: 3 2 1

Q2: Which of the following is NOT a real difference between the readr import functions and the base R import functions?

  • The base R import functions can read .csv files, but cannot files with other delimiters, such as .tsv files, or fixed-width files.

Q3: You read in a file containing runner information and marathon finish times using the following code.

race_times <- read.csv("data/times.txt", stringsAsFactors = F)
race_times
  initials state age time
1      vib    MA  61 6:01
2      adc    TX  45 5:45
3      kme    CT  50 4:19

What is the class of the object race_times?

class(race_times)
[1] "data.frame"
A5. Downloading Files from the Internet

Q1: Select the answer choice that summarizes all of the actions that the following lines of code can perform.

url <- "https://raw.githubusercontent.com/MyUserName/MyProject/master/MyData.csv "
dat <- read_csv(url)
download.file(url, "MyData.csv")
  • Create a tibble in R called dat that contains the information contained in the csv file stored on Github. Download the csv file to the working directory and name the downloaded file “MyData.csv”.






LS0tDQp0aXRsZTogIldyYW5nbGluZywgRGF0YSBJbXBvcnQiDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQo8YnI+DQoNCmBgYHtyfQ0KcGFja2FnZXMgPSBjKA0KICAiZHBseXIiLCJnZ3Bsb3QyIiwic3RyaW5nciIsICJkc2xhYnMiLCAicmVhZHIiLCAidGlkeXIiLCAicHVycnIiLA0KICAibHVicmlkYXRlIiwgInJlYWR4bCINCiAgKQ0KZXhpc3RpbmcgPSBhcy5jaGFyYWN0ZXIoaW5zdGFsbGVkLnBhY2thZ2VzKClbLDFdKQ0KZm9yKHBrZyBpbiBwYWNrYWdlc1shKHBhY2thZ2VzICVpbiUgZXhpc3RpbmcpXSkgaW5zdGFsbC5wYWNrYWdlcyhwa2cpDQpgYGANCg0KYGBge3IgZWNobz1ULCBtZXNzYWdlPUYsIGNhY2hlPUYsIHdhcm5pbmc9Rn0NCnJtKGxpc3Q9bHMoYWxsPVQpKQ0KU3lzLnNldGxvY2FsZSgiTENfQUxMIiwiQyIpDQpvcHRpb25zKGRpZ2l0cz00LCBzY2lwZW49MTIpDQpsaWJyYXJ5KHJlYWRyKQ0KbGlicmFyeShyZWFkeGwpDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShzdHJpbmdyKQ0KbGlicmFyeShsdWJyaWRhdGUpDQpsaWJyYXJ5KHRpZHlyKQ0KbGlicmFyeShkc2xhYnMpDQpgYGANCg0KLSAtIC0NCg0KIyMjIEEuIERhdGEgSW1wb3J0DQoNCiMjIyMjIEExLiBJbXBvcnQgU3ByZWFkc2hlZXRzDQoNCioqUTE6KiogX1doaWNoIG9mIHRoZSBmb2xsb3dpbmcgaXMgTk9UIHBhcnQgb2YgdGhlIGRhdGEgd3JhbmdpbmcgcHJvY2Vzcz9fDQoNCisgQ2hlY2tpbmcgY29ycmVsYXRpb25zIGJldHdlZW4geW91ciB2YXJpYWJsZXMgDQorDQoNCioqUTI6KiogX1doaWNoIGZpbGVzIGNvdWxkIGJlIG9wZW5lZCBpbiBhIGJhc2ljIHRleHQgZWRpdG9yP18NCg0KKyBkYXRhLnR4dA0KKyBkYXRhLmNzdg0KKyBkYXRhLnRzdg0KKw0KDQoqKlEzOioqIFlvdSBvcGVuIHRoZSBmaWxlIGluIGEgYmFzaWMgdGV4dCBlZGl0b3IgYW5kIHNlZSBsaW5lcyB0aGF0IGxvb2sgbGlrZSB0aGUgZm9sbG93aW5nOg0KDQpgYGB7cn0NCnJlYWQudGFibGUoImRhdGEvaW5pdGlhbHMudHh0IiwgaGVhZGVyPVQsIHNlcD0iLCIpDQpgYGANCl9XaGF0IHR5cGUgb2YgZmlsZSBpcyB0aGlzP18NCg0KKyBBIGNvbW1hLWRlbGltaXRlZCBmaWxlIHdpdGggYSBoZWFkZXINCisNCg0KIyMjIyMgQTIuIFBhdGhzIGFuZCB0aGUgV29ya2luZyBEaXJlY3RvcnkNCg0KKipRMToqKiBBc3N1bWUgdGhlIGZvbGxvd2luZyBpcyB0aGUgZnVsbCBwYXRoIHRvIHRoZSBkaXJlY3RvcnkgdGhhdCBhIHN0dWRlbnQgd2FudHMgdG8gdXNlIGFzIHRoZWlyIHdvcmtpbmcgZGlyZWN0b3J5IGluIFI6ICIvVXNlcnMvc3R1ZGVudC9Eb2N1bWVudHMvcHJvamVjdHMvIg0KDQpfV2hpY2ggb2YgdGhlIGZvbGxvd2luZyBsaW5lcyBvZiBjb2RlIENBTk5PVCBzZXQgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHRvIHRoZSBkZXNpcmVkICJwcm9qZWN0cyIgZGlyZWN0b3J5P18NCmBgYHtyIGV2YWw9Rn0NCnNldHdkKC9Vc2Vycy9zdHVkZW50L0RvY3VtZW50cy9wcm9qZWN0cy8pDQpgYGANCg0KKipRMjoqKiBXZSB3YW50IHRvIGNvcHkgdGhlICJtdXJkZXJzLmNzdiIgZmlsZSBmcm9tIHRoZSBkc2xhYnMgcGFja2FnZSBpbnRvIGFuIGV4aXN0aW5nIGZvbGRlciAiZGF0YSIsIHdoaWNoIGlzIGxvY2F0ZWQgaW4gb3VyIEhhcnZhcmRYLVdyYW5nbGluZyBwcm9qZWN0cyBmb2xkZXIuIFdlIGZpcnN0IGVudGVyIHRoZSBjb2RlIGJlbG93IGludG8gb3VyIFJTdHVkaW8gY29uc29sZS4NCmBgYHtyfQ0KbGlicmFyeShkc2xhYnMpDQp3ZCA9IGdldHdkKCkNCmZpbGVuYW1lID0gIm11cmRlcnMuY3N2Ig0KcGF0aCA9IHN5c3RlbS5maWxlKCJleHRkYXRhIiwgcGFja2FnZSA9ICJkc2xhYnMiKQ0KYGBgDQoNCl9XaGljaCBvZiB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIHdvdWxkIE5PVCBzdWNjZXNzZnVsbHkgY29weSDigJxtdXJkZXJzLmNzduKAnSBpbnRvIHRoZSBmb2xkZXIgImRhdGEiP18NCmBgYHtyfQ0KZmlsZS5jb3B5KGZpbGUucGF0aChwYXRoLCAibXVyZGVycy5jc3YiKSwgZ2V0d2QoKSkNCmBgYA0KPHAgc3R5bGU9ImNvbG9yOnJlZDsiPiBJdCBjb3BpZXMgdGhlIGZpbGUgaW50byB0aGUgd29ya2luZyBkaXJlY3RvcnksIG5vdCBpbnRvIHRoZSAiZGF0YSIgZm9sZGVyPC9wPg0KDQojIyMjIyBBMy4gVGhlIHJlYWRyIGFuZCByZWFkeGwgUGFja2FnZXMNCg0KKipRMToqKiBZb3UgYXJlIG5vdCBzdXJlIHdoZXRoZXIgdGhlIG11cmRlcnMuY3N2IGZpbGUgaGFzIGEgaGVhZGVyIHJvdy4gX0hvdyBjb3VsZCB5b3UgY2hlY2sgdGhpcz9fDQoNCisgT3BlbiB0aGUgZmlsZSBpbiBhIGJhc2ljIHRleHQgZWRpdG9yLg0KKyBJbiB0aGUgUlN0dWRpbyDigJxGaWxlc+KAnSBwYW5lLCBjbGljayBvbiB5b3VyIGZpbGUsIHRoZW4gc2VsZWN0IOKAnFZpZXcgRmlsZeKAnS4NCisgVXNlIHRoZSBjb21tYW5kIHJlYWRfbGluZXMgKHJlbWVtYmVyaW5nIHRvIHNwZWNpZnkgdGhlIG51bWJlciBvZiByb3dzIHdpdGggdGhlIG5fbWF4IGFyZ3VtZW50KS4NCisNCiANCg0KKipRMjoqKiBfV2hhdCBpcyBvbmUgZGlmZmVyZW5jZSBiZXR3ZWVuIHJlYWRfZXhjZWwgYW5kIHJlYWRfeGxzeD9fDQoNCisgUmVhZF9leGNlbCByZWFkcyBib3RoIC54bHMgYW5kIC54bHN4IGZpbGVzIGJ5IGRldGVjdGluZyB0aGUgZmlsZSBmb3JtYXQgZnJvbSBpdHMgZXh0ZW5zaW9uLCB3aGlsZSByZWFkX3hsc3ggb25seSByZWFkcyAueGxzeCBmaWxlcy4NCisNCg0KKipRMzoqKiBZb3UgaGF2ZSBhIGZpbGUgY2FsbGVkICJ0aW1lcy50eHQiIHRoYXQgY29udGFpbnMgcmFjZSBmaW5pc2ggdGltZXMgZm9yIGEgbWFyYXRob24uIFRoZSBmaXJzdCBmb3VyIGxpbmVzIG9mIHRoZSBmaWxlIGxvb2sgbGlrZSB0aGlzOg0KDQpfV2hpY2ggbGluZSBvZiBjb2RlIHdpbGwgTk9UIHByb2R1Y2UgYSB0aWJibGUgd2l0aCBjb2x1bW4gbmFtZXMg4oCcaW5pdGlhbHPigJ0sIOKAnHN0YXRl4oCdLCDigJxhZ2XigJ0sIGFuZCDigJx0aW1l4oCdP18NCmBgYHtyfQ0KcmFjZV90aW1lcyA8LSByZWFkLmNzdigiZGF0YS90aW1lcy50eHQiKQ0KcmFjZV90aW1lcw0KY2xhc3MocmFjZV90aW1lcykNCmBgYA0KPHAgc3R5bGU9ImNvbG9yOnJlZDsiPiBJbnN0ZWFkIG9mICJ0aWJibGUiLCBpdCBwcm9kdWNlcyBhIGRhdGEgZnJhbWUuPC9wPg0KDQoqKlE0OioqIFlvdSBhbHNvIGhhdmUgYWNjZXNzIHRvIG1hcmF0aG9uIGZpbmlzaCB0aW1lcyBpbiB0aGUgZm9ybSBvZiBhbiBFeGNlbCBkb2N1bWVudCBuYW1lZCDigJx0aW1lcy54bHN44oCdLiBJbiB0aGUgRXhjZWwgZG9jdW1lbnQsIGRpZmZlcmVudCBzaGVldHMgY29udGFpbiByYWNlIGluZm9ybWF0aW9uIGZvciBkaWZmZXJlbnQgeWVhcnMuIFRoZSBmaXJzdCBzaGVldCBpcyBuYW1lZCDigJwyMDE14oCdLCB0aGUgc2Vjb25kIGlzIG5hbWVkIOKAnDIwMTbigJ0sIGFuZCB0aGUgdGhpcmQgaXMgbmFtZWQg4oCcMjAxN+KAnS4NCg0KX1doaWNoIGxpbmUgb2YgY29kZSB3aWxsIE5PVCBpbXBvcnQgdGhlIGRhdGEgY29udGFpbmVkIGluIHRoZSDigJwyMDE24oCdIHRhYiBvZiB0aGlzIEV4Y2VsIHNoZWV0P18NCmBgYHtyIGV2YWw9Rn0NCmxpYnJhcnkocmVhZHhsKQ0KdGltZXNfMjAxNiA8LSByZWFkX3hsc3goInRpbWVzLnhsc3giLCBzaGVldCA9ICIyIikNCmBgYA0KDQojIyMjIyBBNC4gSW1wb3J0aW5nIERhdGEgVXNpbmcgUi1iYXNlIEZ1bmN0aW9ucw0KDQoqKlExOioqIFlvdSBoYXZlIGEgY29tbWEtc2VwYXJhdGVkIHZhbHVlcyBmaWxlIHRoYXQgY29udGFpbnMgdGhlIGluaXRpYWxzLCBob21lIHN0YXRlcywgYWdlcywgYW5kIHJhY2UgZmluaXNoIHRpbWVzIGZvciBtYXJhdGhvbiBydW5uZXJzLiBUaGUgcnVubmVyc+KAmSBpbml0aWFscyBjb250YWluIHRocmVlIGNoYXJhY3RlcnMgZm9yIHRoZSBydW5uZXJz4oCZIGZpcnN0LCBtaWRkbGUsIGFuZCBsYXN0IG5hbWVzIChmb3IgZXhhbXBsZSwg4oCcS01F4oCdKS4NCg0KWW91IHJlYWQgaW4gdGhlIGZpbGUgdXNpbmcgdGhlIGZvbGxvd2luZyBjb2RlLg0KYGBge3J9DQpyYWNlX3RpbWVzIDwtIHJlYWQuY3N2KCJkYXRhL3RpbWVzLnR4dCIpDQpgYGANCg0KX1doYXQgaXMgdGhlIGRhdGEgdHlwZSBvZiB0aGUgYGluaXRpYWxzYCBpbiB0aGUgb2JqZWN0IGByYWNlX3RpbWVzYD9fDQpgYGB7cn0NCnN0cihyYWNlX3RpbWVzKQ0KYGBgDQoNCg0KKipRMjoqKiBfV2hpY2ggb2YgdGhlIGZvbGxvd2luZyBpcyBOT1QgYSByZWFsIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgcmVhZHIgaW1wb3J0IGZ1bmN0aW9ucyBhbmQgdGhlIGJhc2UgUiBpbXBvcnQgZnVuY3Rpb25zP18NCg0KKyBUaGUgYmFzZSBSIGltcG9ydCBmdW5jdGlvbnMgY2FuIHJlYWQgLmNzdiBmaWxlcywgYnV0IGNhbm5vdCBmaWxlcyB3aXRoIG90aGVyIGRlbGltaXRlcnMsIHN1Y2ggYXMgLnRzdiBmaWxlcywgb3IgZml4ZWQtd2lkdGggZmlsZXMuDQorDQoNCioqUTM6KiogWW91IHJlYWQgaW4gYSBmaWxlIGNvbnRhaW5pbmcgcnVubmVyIGluZm9ybWF0aW9uIGFuZCBtYXJhdGhvbiBmaW5pc2ggdGltZXMgdXNpbmcgdGhlIGZvbGxvd2luZyBjb2RlLg0KYGBge3J9DQpyYWNlX3RpbWVzIDwtIHJlYWQuY3N2KCJkYXRhL3RpbWVzLnR4dCIsIHN0cmluZ3NBc0ZhY3RvcnMgPSBGKQ0KcmFjZV90aW1lcw0KYGBgDQoNCl9XaGF0IGlzIHRoZSBjbGFzcyBvZiB0aGUgb2JqZWN0IGByYWNlX3RpbWVzYD9fDQpgYGB7cn0NCmNsYXNzKHJhY2VfdGltZXMpDQpgYGANCg0KDQojIyMjIyBBNS4gRG93bmxvYWRpbmcgRmlsZXMgZnJvbSB0aGUgSW50ZXJuZXQNCg0KKipRMToqKiBTZWxlY3QgdGhlIGFuc3dlciBjaG9pY2UgdGhhdCBzdW1tYXJpemVzIGFsbCBvZiB0aGUgYWN0aW9ucyB0aGF0IHRoZSBmb2xsb3dpbmcgbGluZXMgb2YgY29kZSBjYW4gcGVyZm9ybS4NCmBgYHtyIGV2YWw9Rn0NCnVybCA8LSAiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL015VXNlck5hbWUvTXlQcm9qZWN0L21hc3Rlci9NeURhdGEuY3N2ICINCmRhdCA8LSByZWFkX2Nzdih1cmwpDQpkb3dubG9hZC5maWxlKHVybCwgIk15RGF0YS5jc3YiKQ0KYGBgDQoNCisgQ3JlYXRlIGEgdGliYmxlIGluIFIgY2FsbGVkIGRhdCB0aGF0IGNvbnRhaW5zIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQgaW4gdGhlIGNzdiBmaWxlIHN0b3JlZCBvbiBHaXRodWIuIERvd25sb2FkIHRoZSBjc3YgZmlsZSB0byB0aGUgd29ya2luZyBkaXJlY3RvcnkgYW5kIG5hbWUgdGhlIGRvd25sb2FkZWQgZmlsZSAiTXlEYXRhLmNzdiIuDQorDQoNCi0gLSAtDQoNCjxicj48YnI+PGJyPjxicj48YnI+DQoNCjxzdHlsZT4NCi5jYXB0aW9uIHsNCiAgY29sb3I6ICM3Nzc7DQogIG1hcmdpbi10b3A6IDEwcHg7DQp9DQpwIGNvZGUgew0KICB3aGl0ZS1zcGFjZTogaW5oZXJpdDsNCn0NCnByZSB7DQogIHdvcmQtYnJlYWs6IG5vcm1hbDsNCiAgd29yZC13cmFwOiBub3JtYWw7DQogIGxpbmUtaGVpZ2h0OiAxOw0KfQ0KcHJlIGNvZGUgew0KICB3aGl0ZS1zcGFjZTogaW5oZXJpdDsNCn0NCnAsbGkgew0KICBmb250LWZhbWlseTogIlRyZWJ1Y2hldCBNUyIsICLlvq7ou5/mraPpu5Hpq5QiLCAiTWljcm9zb2Z0IEpoZW5nSGVpIjsNCn0NCg0KLnJ7DQogIGxpbmUtaGVpZ2h0OiAxLjI7DQp9DQoNCnRpdGxlew0KICBjb2xvcjogI2NjMDAwMDsNCiAgZm9udC1mYW1pbHk6ICJUcmVidWNoZXQgTVMiLCAi5b6u6Luf5q2j6buR6auUIiwgIk1pY3Jvc29mdCBKaGVuZ0hlaSI7DQp9DQoNCmJvZHl7DQogIGZvbnQtZmFtaWx5OiAiVHJlYnVjaGV0IE1TIiwgIuW+rui7n+ato+m7kemrlCIsICJNaWNyb3NvZnQgSmhlbmdIZWkiOw0KfQ0KDQpoMSxoMixoMyxoNCxoNXsNCiAgY29sb3I6ICMwMDg4MDA7DQogIGZvbnQtZmFtaWx5OiAiVHJlYnVjaGV0IE1TIiwgIuW+rui7n+ato+m7kemrlCIsICJNaWNyb3NvZnQgSmhlbmdIZWkiOw0KfQ0KDQpoM3sNCiAgY29sb3I6ICNiMzZiMDA7DQogIGJhY2tncm91bmQ6ICNmZmUwYjM7DQogIGxpbmUtaGVpZ2h0OiAyOw0KICBmb250LXdlaWdodDogYm9sZDsNCn0NCg0KaDV7DQogIGNvbG9yOiAjMDA2MDAwOw0KICBiYWNrZ3JvdW5kOiAjZmZmZmUwOw0KICBsaW5lLWhlaWdodDogMjsNCiAgZm9udC13ZWlnaHQ6IGJvbGQ7DQp9DQoNCmVtew0KICBjb2xvcjogIzAwMDBjMDsNCiAgYmFja2dyb3VuZDogI2Y4ZjhmODsNCiAgfQ0KPC9zdHlsZT4NCg==