Problem 1: Examine structure of Iris dataset

library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.1 ──
## ✓ ggplot2 3.3.5     ✓ purrr   0.3.4
## ✓ tibble  3.1.6     ✓ dplyr   1.0.7
## ✓ tidyr   1.1.4     ✓ stringr 1.4.0
## ✓ readr   2.1.1     ✓ forcats 0.5.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
data(iris)
glimpse(iris)
## Rows: 150
## Columns: 5
## $ Sepal.Length <dbl> 5.1, 4.9, 4.7, 4.6, 5.0, 5.4, 4.6, 5.0, 4.4, 4.9, 5.4, 4.…
## $ Sepal.Width  <dbl> 3.5, 3.0, 3.2, 3.1, 3.6, 3.9, 3.4, 3.4, 2.9, 3.1, 3.7, 3.…
## $ Petal.Length <dbl> 1.4, 1.4, 1.3, 1.5, 1.4, 1.7, 1.4, 1.5, 1.4, 1.5, 1.5, 1.…
## $ Petal.Width  <dbl> 0.2, 0.2, 0.2, 0.2, 0.2, 0.4, 0.3, 0.2, 0.2, 0.1, 0.2, 0.…
## $ Species      <fct> setosa, setosa, setosa, setosa, setosa, setosa, setosa, s…

Dataset has 150 observations and 5 variables

Problem 2: Create iris1 with only the species virginica and versicolor with sepal lengths longer than 6 cm and sepal widths longer than 2.5 cm. How many observations and variables are in the dataset?

iris1 <- filter(iris, Species%in%c("virginica","versicolor"), Sepal.Length > 6, Sepal.Width > 2.5)
glimpse(iris1)
## Rows: 56
## Columns: 5
## $ Sepal.Length <dbl> 7.0, 6.4, 6.9, 6.5, 6.3, 6.6, 6.1, 6.7, 6.1, 6.1, 6.4, 6.…
## $ Sepal.Width  <dbl> 3.2, 3.2, 3.1, 2.8, 3.3, 2.9, 2.9, 3.1, 2.8, 2.8, 2.9, 3.…
## $ Petal.Length <dbl> 4.7, 4.5, 4.9, 4.6, 4.7, 4.6, 4.7, 4.4, 4.0, 4.7, 4.3, 4.…
## $ Petal.Width  <dbl> 1.4, 1.5, 1.5, 1.5, 1.6, 1.3, 1.4, 1.4, 1.3, 1.2, 1.3, 1.…
## $ Species      <fct> versicolor, versicolor, versicolor, versicolor, versicolo…

Dataset has 56 observations and 5 variables

Problem 3: create iris2 from iris1 that contains only the columns for Species, Sepal.Length, and Sepal.Width. How many observations and variables are in the dataset?

iris2 <- select(iris1, Species, Sepal.Length, Sepal.Width)
glimpse(iris2)
## Rows: 56
## Columns: 3
## $ Species      <fct> versicolor, versicolor, versicolor, versicolor, versicolo…
## $ Sepal.Length <dbl> 7.0, 6.4, 6.9, 6.5, 6.3, 6.6, 6.1, 6.7, 6.1, 6.1, 6.4, 6.…
## $ Sepal.Width  <dbl> 3.2, 3.2, 3.1, 2.8, 3.3, 2.9, 2.9, 3.1, 2.8, 2.8, 2.9, 3.…

Iris2 has 56 observations and 3 variables

Problem 4: create iris3 from iris2 that orders the observations from largest to smallest sepal length. Show the first 6 rows of this dataset

iris3 <- arrange(iris2, by=desc(Sepal.Length))
head(iris3)
##     Species Sepal.Length Sepal.Width
## 1 virginica          7.9         3.8
## 2 virginica          7.7         3.8
## 3 virginica          7.7         2.6
## 4 virginica          7.7         2.8
## 5 virginica          7.7         3.0
## 6 virginica          7.6         3.0

Problem 5: Create iris4 from iris3 that creates a column with a sepal area (length * width) value for each observation. How many observations and variables are in the dataset?

iris4 <- mutate(iris3, Sepal.Area = Sepal.Length*Sepal.Width)
glimpse(iris4)
## Rows: 56
## Columns: 4
## $ Species      <fct> virginica, virginica, virginica, virginica, virginica, vi…
## $ Sepal.Length <dbl> 7.9, 7.7, 7.7, 7.7, 7.7, 7.6, 7.4, 7.3, 7.2, 7.2, 7.2, 7.…
## $ Sepal.Width  <dbl> 3.8, 3.8, 2.6, 2.8, 3.0, 3.0, 2.8, 2.9, 3.6, 3.2, 3.0, 3.…
## $ Sepal.Area   <dbl> 30.02, 29.26, 20.02, 21.56, 23.10, 22.80, 20.72, 21.17, 2…

Data set has 56 observations and 4 variables

Problem 6: Create iris5 that calculates the average sepal length, the average sepal width, and the sample size of the entire iris4 data frame and print iris5

iris5 <- summarize(iris4, meanSepalLength=mean(Sepal.Length), meanSepalWidth=mean(Sepal.Width), N = n())

glimpse(iris5)
## Rows: 1
## Columns: 3
## $ meanSepalLength <dbl> 6.698214
## $ meanSepalWidth  <dbl> 3.041071
## $ N               <int> 56

Problem 7: Create iris6 that calculates the average sepal length, the average sepal width, and the sample size for each species of in the iris4 data frame and print iris6.

iris6 <- group_by(iris4, Species) 
iris6 <- summarize(iris6, meanSepalLength=mean(Sepal.Length), meanSepalWidth=mean(Sepal.Width), TotalN = n())
print(iris6)
## # A tibble: 2 × 4
##   Species    meanSepalLength meanSepalWidth TotalN
##   <fct>                <dbl>          <dbl>  <int>
## 1 versicolor            6.48           2.99     17
## 2 virginica             6.79           3.06     39

Problem 8: rework all of your previous statements into an extended piping operation that uses iris as the input and generates iris6 as the output

FinalIris <- iris %>%
  filter(Species%in%c("virginica","versicolor"), Sepal.Length > 6, Sepal.Width > 2.5) %>% 
  select(Species, Sepal.Length, Sepal.Width) %>% 
  arrange(by=desc(Sepal.Length)) %>% 
  mutate(Sepal.Area = Sepal.Length * Sepal.Width) %>% 
  group_by(Species) %>% 
  summarize(meanSepalLength=mean(Sepal.Length), meanSepalWidth=mean(Sepal.Width), TotalN = n())

print(FinalIris)
## # A tibble: 2 × 4
##   Species    meanSepalLength meanSepalWidth TotalN
##   <fct>                <dbl>          <dbl>  <int>
## 1 versicolor            6.48           2.99     17
## 2 virginica             6.79           3.06     39

Problem 9: Create a ‘longer’ data frame with three columns named: Species, Measure, Value

iris %>% 
  pivot_longer(Sepal.Length:Petal.Width, names_to= "Measure", values_to = "Value")
## # A tibble: 600 × 3
##    Species Measure      Value
##    <fct>   <chr>        <dbl>
##  1 setosa  Sepal.Length   5.1
##  2 setosa  Sepal.Width    3.5
##  3 setosa  Petal.Length   1.4
##  4 setosa  Petal.Width    0.2
##  5 setosa  Sepal.Length   4.9
##  6 setosa  Sepal.Width    3  
##  7 setosa  Petal.Length   1.4
##  8 setosa  Petal.Width    0.2
##  9 setosa  Sepal.Length   4.7
## 10 setosa  Sepal.Width    3.2
## # … with 590 more rows