From 9f26df42e681e86a94ccd4b2a8198b87cb21c536 Mon Sep 17 00:00:00 2001 From: Jing907 Date: Tue, 27 Sep 2016 17:59:24 -0400 Subject: [PATCH] Thank you for reviewing, Dr. Lang! --- .gitignore | 4 + Assignment#3_Jing.Rproj | 13 ++ Class 7 Instructions.Rmd | 54 ++++---- Class_7_Instructions.html | 251 ++++++++++++++++++++++++++++++++++++++ Rplot.png | Bin 0 -> 21006 bytes 5 files changed, 297 insertions(+), 25 deletions(-) create mode 100644 .gitignore create mode 100644 Assignment#3_Jing.Rproj create mode 100644 Class_7_Instructions.html create mode 100644 Rplot.png 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/Assignment#3_Jing.Rproj b/Assignment#3_Jing.Rproj new file mode 100644 index 0000000..8e3c2eb --- /dev/null +++ b/Assignment#3_Jing.Rproj @@ -0,0 +1,13 @@ +Version: 1.0 + +RestoreWorkspace: Default +SaveWorkspace: Default +AlwaysSaveHistory: Default + +EnableCodeIndexing: Yes +UseSpacesForTab: Yes +NumSpacesForTab: 2 +Encoding: UTF-8 + +RnwWeave: Sweave +LaTeX: pdfLaTeX diff --git a/Class 7 Instructions.Rmd b/Class 7 Instructions.Rmd index 5ae641a..e07b4dc 100644 --- a/Class 7 Instructions.Rmd +++ b/Class 7 Instructions.Rmd @@ -1,7 +1,7 @@ --- title: "Assignment 3" -author: "Charles Lang" -date: "February 13, 2016" +author: "Jingtong Feng" +date: "September 27, 2016" --- ##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,7 +9,7 @@ date: "February 13, 2016" ##Install packages for manipulating data We will use two packages: tidyr and dplyr -```{r} +```{r, eval=FALSE} #Insall packages install.packages("tidyr", "dplyr") #Load packages @@ -17,8 +17,9 @@ 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) +```{r, eval=FALSE} +data_wide <- read.table("~/Desktop/HUDK 4050/Assignment#3_Jing/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) @@ -26,7 +27,6 @@ View(data_wide) #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 fisrt task is to convert wide format to long format data. To do this we will use the "gather" function: gather(data, time, variables) @@ -37,7 +37,7 @@ 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") @@ -52,14 +52,14 @@ 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} - +```{r, eval=FALSE} +student_data<-spread(student_activity,variables,measure) ``` ##Now that you have workable student data set, subset it to create a data set that only includes data from the second class. @@ -68,45 +68,45 @@ To do this we will use the dplyr package (We will need to call dplyr in the comm 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 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 +116,26 @@ 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} +average_student_motivation<-merge$`mean(motivation)` +average_instructor_activity<-merge$`mean(m_active_time)` +plot(average_student_motivation,average_instructor_activity) +cor.test(average_student_motivation,average_instructor_activity) ``` 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..3ec6f3e --- /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

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

Upload wide format instructor data (instructor_activity_wide.csv)

+
data_wide <- read.table("~/Desktop/HUDK 4050/Assignment#3_Jing/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)

+
+
+

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 fisrt 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<-spread(student_activity,variables,measure)
+
+
+

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))
+
+
+

Sumaraizing

+

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:

+
average_student_motivation<-merge$`mean(motivation)`
+average_instructor_activity<-merge$`mean(m_active_time)`
+plot(average_student_motivation,average_instructor_activity)
+cor.test(average_student_motivation,average_instructor_activity)
+

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..b30f70ed59309a7a0e280fe124e89ceae0a94b16 GIT binary patch literal 21006 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