From 47d9f24124cc178268028e89ae8dedcaeee9a4cf Mon Sep 17 00:00:00 2001 From: Jonathan Stelman Date: Tue, 27 Sep 2016 17:56:51 -0400 Subject: [PATCH] Completed assignment, Results of plot exported to Rplot.png --- .gitignore | 4 + Class 7 Instructions.Rmd | 65 +++++----- Class_7_Instructions.html | 251 ++++++++++++++++++++++++++++++++++++++ Rplot.png | Bin 0 -> 21855 bytes class7.Rproj | 13 ++ 5 files changed, 304 insertions(+), 29 deletions(-) create mode 100644 .gitignore create mode 100644 Class_7_Instructions.html create mode 100644 Rplot.png create mode 100644 class7.Rproj diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5b6a065 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.Rproj.user +.Rhistory +.RData +.Ruserdata diff --git a/Class 7 Instructions.Rmd b/Class 7 Instructions.Rmd index 5ae641a..c095e8f 100644 --- a/Class 7 Instructions.Rmd +++ b/Class 7 Instructions.Rmd @@ -1,7 +1,8 @@ --- title: "Assignment 3" -author: "Charles Lang" -date: "February 13, 2016" +author: "Jonathan Stelman" +date: "September 27, 2016" +output: html_document --- ##In this assignment you will be practising data tidying. You will be using the data we have collected from class and data generated from the instructor wearing a wristband activity tracker. @@ -9,8 +10,8 @@ date: "February 13, 2016" ##Install packages for manipulating data We will use two packages: tidyr and dplyr -```{r} -#Insall packages +```{r, eval=FALSE} +#Install packages install.packages("tidyr", "dplyr") #Load packages library(tidyr, dplyr) @@ -18,7 +19,7 @@ library(tidyr, dplyr) ##Upload wide format instructor data (instructor_activity_wide.csv) ```{r} -data_wide <- read.table("~/Documents/NYU/EDCT2550/Assignments/Assignment 3/instructor_activity_wide.csv", sep = ",", header = TRUE) +data_wide <- read.table("instructor_activity_wide.csv", sep = ",", header = TRUE) #Now view the data you have uploaded and notice how its structure: each variable is a date and each row is a type of measure. View(data_wide) @@ -28,7 +29,7 @@ View(data_wide) ``` -##This is not a convenient format for us to analyze. What we need is for each type of measure to be a column. Your fisrt task is to convert wide format to long format data. To do this we will use the "gather" function: gather(data, time, variables) +###This is not a convenient format for us to analyze. What we need is for each type of measure to be a column. Your first task is to convert wide format to long format data. To do this we will use the "gather" function: gather(data, time, variables) The gather command requires the following input arguments: @@ -37,14 +38,14 @@ The gather command requires the following input arguments: - value: Name of new value column - ...: Names of source columns that contain values -```{r} +```{r eval=FALSE} data_long <- gather(data_wide, date, variables) #Rename the variables so we don't get confused about what is what! names(data_long) <- c("variables", "date", "measure") #Take a look at your new data, looks weird huh? View(data_long) ``` -##Now convert this long format into separate columns using the "spread" function to separate by the type of measure +###Now convert this long format into separate columns using the "spread" function to separate by the type of measure The spread function requires the following input: @@ -52,61 +53,64 @@ The spread function requires the following input: - key: Name of column containing the new column names - value: Name of column containing values -```{r} +```{r eval=FALSE} instructor_data <- spread(data_long, variables, measure) ``` -##Now we have a workable instructor data set!The next step is to create a workable student data set. Upload the data "student_activity.csv". View your file once you have uploaded it and then draw on a piece of paper the structure that you want before you attempt to code it. Write the code you use in the chunk below. (Hint: you can do it in one step) - -```{r} +###Now we have a workable instructor data set!The next step is to create a workable student data set. Upload the data "student_activity.csv". View your file once you have uploaded it and then draw on a piece of paper the structure that you want before you attempt to code it. Write the code you use in the chunk below. (Hint: you can do it in one step) +```{r, eval=FALSE} +student_data<-read.table("student_activity.csv",sep =",", header=TRUE) +student_data<-spread(student_data, variable, measure) +View(student_data) +> ``` -##Now that you have workable student data set, subset it to create a data set that only includes data from the second class. +###Now that you have workable student data set, subset it to create a data set that only includes data from the second class. To do this we will use the dplyr package (We will need to call dplyr in the command by writing dplyr:: because dplyr uses commands that exist in other packages but to do different operations.) Notice that the way we subset is with a logical rule, in this case date == 20160204. In R, when we want to say that something "equals" something else we need to use a double equals sign "==". (A single equals sign means the same as <-). -```{r} +```{r, eval=FALSE} student_data_2 <- dplyr::filter(student_data, date == 20160204) ``` Now subset the student_activity data frame to create a data frame that only includes students who have sat at table 4. Write your code in the following chunk: -```{r} - +```{r, eval=FALSE} +student_data_3 <- dplyr::filter(student_data, table == 4) ``` ##Make a new variable It is useful to be able to make new variables for analysis. We can either apend a new variable to our dataframe or we can replace some variables with a new variable. Below we will use the "mutate" function to create a new variable "total_sleep" from the light and deep sleep variables in the instructor data. -```{r} +```{r eval=FALSE} instructor_data <- dplyr::mutate(instructor_data, total_sleep = s_deep + s_light) ``` Now, refering to the cheat sheet, create a data frame called "instructor_sleep" that contains ONLY the total_sleep variable. Write your code in the following code chunk: -```{r} - +```{r eval=FALSE} +instructor_sleep <- dplyr::select(instructor_data, total_sleep) ``` Now, we can combine several commands together to create a new variable that contains a grouping. The following code creates a weekly grouping variable called "week" in the instructor data set: -```{r} +```{r eval=FALSE} instructor_data <- dplyr::mutate(instructor_data, week = dplyr::ntile(date, 3)) ``` Create the same variables for the student data frame, write your code in the code chunk below: -```{r} - +```{r, eval=FALSE} +student_data <- dplyr::mutate(student_data, week = dplyr::ntile(date, 3)) ``` -##Sumaraizing +##Summarizing Next we will summarize the student data. First we can simply take an average of one of our student variables such as motivation: -```{r} +```{r, eval=FALSE} student_data %>% dplyr::summarise(mean(motivation)) #That isn't super interesting, so let's break it down by week: @@ -116,22 +120,25 @@ student_data %>% dplyr::group_by(date) %>% dplyr::summarise(mean(motivation)) Create two new data sets using this method. One that sumarizes average motivation for students for each week (student_week) and another than sumarizes "m_active_time" for the instructor per week (instructor_week). Write your code in the following chunk: -```{r} - +```{r, eval=FALSE} +student_week <- student_data %>% dplyr::group_by(week) %>% dplyr::summarise(mean(motivation)) +instructor_week <- instructor_data %>% dplyr::group_by(week) %>% dplyr::summarise(mean(m_active_time)) ``` ##Merging Now we will merge these two data frames using dplyr. -```{r} +```{r, eval=FALSE} merge <- dplyr::full_join(instructor_week, student_week, "week") ``` ##Visualize Visualize the relationship between these two variables (mean motivation and mean instructor activity) with the "plot" command and then run a Pearson correlation test (hint: cor.test()). Write the code for the these commands below: -```{r} - +```{r, eval=FALSE} +plot(merge$mean_active_time, merge$mean_motivation) +cor.test(merge$mean_active_time, merge$mean_motivation) ``` + Fnally save your markdown document and your plot to this folder and comit, push and pull your repo to submit. diff --git a/Class_7_Instructions.html b/Class_7_Instructions.html new file mode 100644 index 0000000..a503ad2 --- /dev/null +++ b/Class_7_Instructions.html @@ -0,0 +1,251 @@ + + + + + + + + + + + + + + + +Assignment 3 + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+

In this assignment you will be practising data tidying. You will be using the data we have collected from class and data generated from the instructor wearing a wristband activity tracker.

+
+
+

First, you need to import into R a data set containing information about Charles’ activity for the last three weeks. You can find this data set within the Assignment 3 repository you cloned to create this project.

+
+
+

Install packages for manipulating data

+

We will use two packages: tidyr and dplyr

+
#Install packages
+install.packages("tidyr", "dplyr")
+#Load packages
+library(tidyr, dplyr)
+
+
+

Upload wide format instructor data (instructor_activity_wide.csv)

+
data_wide <- read.table("instructor_activity_wide.csv", sep = ",", header = TRUE)
+
+#Now view the data you have uploaded and notice how its structure: each variable is a date and each row is a type of measure.
+View(data_wide)
+
## Warning: running command ''/usr/bin/otool' -L '/Library/Frameworks/
+## R.framework/Resources/modules/R_de.so'' had status 69
+
#R doesn't like having variable names that consist only of numbers so, as you can see, every variable starts with the letter "X". The numbers represent dates in the format year-month-day.
+
+

This is not a convenient format for us to analyze. What we need is for each type of measure to be a column. Your first task is to convert wide format to long format data. To do this we will use the “gather” function: gather(data, time, variables)

+

The gather command requires the following input arguments:

+
    +
  • data: Data object
  • +
  • key: Name of new key column (made from names of data columns)
  • +
  • value: Name of new value column
  • +
  • …: Names of source columns that contain values
  • +
+
data_long <- gather(data_wide, date, variables)
+#Rename the variables so we don't get confused about what is what!
+names(data_long) <- c("variables", "date", "measure")
+#Take a look at your new data, looks weird huh?
+View(data_long)
+
+
+

Now convert this long format into separate columns using the “spread” function to separate by the type of measure

+

The spread function requires the following input:

+
    +
  • data: Data object
  • +
  • key: Name of column containing the new column names
  • +
  • value: Name of column containing values
  • +
+
instructor_data <- spread(data_long, variables, measure)
+
+
+

Now we have a workable instructor data set!The next step is to create a workable student data set. Upload the data “student_activity.csv”. View your file once you have uploaded it and then draw on a piece of paper the structure that you want before you attempt to code it. Write the code you use in the chunk below. (Hint: you can do it in one step)

+
student_data<-read.table("student_activity.csv",sep =",", header=TRUE)
+student_data<-spread(student_data, variable, measure)
+View(student_data)
+> 
+
+
+

Now that you have workable student data set, subset it to create a data set that only includes data from the second class.

+

To do this we will use the dplyr package (We will need to call dplyr in the command by writing dplyr:: because dplyr uses commands that exist in other packages but to do different operations.)

+

Notice that the way we subset is with a logical rule, in this case date == 20160204. In R, when we want to say that something “equals” something else we need to use a double equals sign “==”. (A single equals sign means the same as <-).

+
student_data_2 <- dplyr::filter(student_data, date == 20160204)
+

Now subset the student_activity data frame to create a data frame that only includes students who have sat at table 4. Write your code in the following chunk:

+
student_data_3 <- dplyr::filter(student_data, table == 4)
+
+
+
+

Make a new variable

+

It is useful to be able to make new variables for analysis. We can either apend a new variable to our dataframe or we can replace some variables with a new variable. Below we will use the “mutate” function to create a new variable “total_sleep” from the light and deep sleep variables in the instructor data.

+
instructor_data <- dplyr::mutate(instructor_data, total_sleep = s_deep + s_light)
+

Now, refering to the cheat sheet, create a data frame called “instructor_sleep” that contains ONLY the total_sleep variable. Write your code in the following code chunk:

+
instructor_sleep <- dplyr::select(instructor_data, total_sleep)
+

Now, we can combine several commands together to create a new variable that contains a grouping. The following code creates a weekly grouping variable called “week” in the instructor data set:

+
instructor_data <- dplyr::mutate(instructor_data, week = dplyr::ntile(date, 3))
+

Create the same variables for the student data frame, write your code in the code chunk below:

+
student_data <- dplyr::mutate(student_data, week = dplyr::ntile(date, 3))
+
+
+

Summarizing

+

Next we will summarize the student data. First we can simply take an average of one of our student variables such as motivation:

+
student_data %>% dplyr::summarise(mean(motivation))
+
+#That isn't super interesting, so let's break it down by week:
+
+student_data %>% dplyr::group_by(date) %>% dplyr::summarise(mean(motivation))
+

Create two new data sets using this method. One that sumarizes average motivation for students for each week (student_week) and another than sumarizes “m_active_time” for the instructor per week (instructor_week). Write your code in the following chunk:

+
student_week <- student_data %>% dplyr::group_by(week) %>% dplyr::summarise(mean(motivation))
+instructor_week <- instructor_data %>% dplyr::group_by(week) %>% dplyr::summarise(mean(m_active_time))
+
+
+

Merging

+

Now we will merge these two data frames using dplyr.

+
merge <- dplyr::full_join(instructor_week, student_week, "week")
+
+
+

Visualize

+

Visualize the relationship between these two variables (mean motivation and mean instructor activity) with the “plot” command and then run a Pearson correlation test (hint: cor.test()). Write the code for the these commands below:

+
plot(merge$mean_active_time, merge$mean_motivation)
+cor.test(merge$mean_active_time, merge$mean_motivation)
+

Fnally save your markdown document and your plot to this folder and comit, push and pull your repo to submit.

+
+ + + + +
+ + + + + + + + diff --git a/Rplot.png b/Rplot.png new file mode 100644 index 0000000000000000000000000000000000000000..3155ce4b93f90e99d196fb9789d65b752599a470 GIT binary patch literal 21855 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