Problem 1: Character Vectors

# Answer:
# (a)
weather <- c("stormy", "sunny", "cloudy")

# (b)
more_weather <- c(weather, "hazy", "clear")

# (c)
weather
## [1] "stormy" "sunny"  "cloudy"
more_weather
## [1] "stormy" "sunny"  "cloudy" "hazy"   "clear"

Problem 2: Matrices

\[ \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} \]

# Answer:
# (a)

identity_matrix <- matrix(
  c(1, 0, 0, 0,
    0, 1, 0, 0,
    0, 0, 1, 0,
    0, 0, 0, 1),
  nrow = 4,
  ncol = 4,
  byrow = TRUE
)
identity_matrix
##      [,1] [,2] [,3] [,4]
## [1,]    1    0    0    0
## [2,]    0    1    0    0
## [3,]    0    0    1    0
## [4,]    0    0    0    1
# (b)
v <- c(0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1)

gender_factor <- factor(v)
levels(gender_factor) <- c("Male", "Female")
gender_factor
##  [1] Male   Male   Male   Female Female Female Female Male   Male   Male  
## [11] Female Female Female Female Male   Male   Male   Female Female Female
## [21] Female Male   Male   Male   Female Female Female Female Male   Male  
## [31] Male   Female Female Female Female
## Levels: Male Female
# (c)
matrix_7x5 <- matrix(gender_factor, nrow = 7, ncol = 5)
matrix_7x5
##      [,1]     [,2]     [,3]     [,4]     [,5]    
## [1,] "Male"   "Male"   "Male"   "Male"   "Male"  
## [2,] "Male"   "Male"   "Male"   "Male"   "Male"  
## [3,] "Male"   "Male"   "Male"   "Male"   "Male"  
## [4,] "Female" "Female" "Female" "Female" "Female"
## [5,] "Female" "Female" "Female" "Female" "Female"
## [6,] "Female" "Female" "Female" "Female" "Female"
## [7,] "Female" "Female" "Female" "Female" "Female"
matrix_5x7 <- matrix(gender_factor, nrow = 5, ncol = 7)
matrix_5x7
##      [,1]     [,2]     [,3]     [,4]     [,5]     [,6]     [,7]    
## [1,] "Male"   "Female" "Female" "Male"   "Female" "Female" "Male"  
## [2,] "Male"   "Female" "Female" "Male"   "Male"   "Female" "Female"
## [3,] "Male"   "Male"   "Female" "Female" "Male"   "Female" "Female"
## [4,] "Female" "Male"   "Female" "Female" "Male"   "Male"   "Female"
## [5,] "Female" "Male"   "Male"   "Female" "Female" "Male"   "Female"
matrix_7x5[6, 1:5]
## [1] "Female" "Female" "Female" "Female" "Female"
matrix_5x7[1:5, 3]
## [1] "Female" "Female" "Female" "Female" "Male"

Problem 3: Binary Practice

(Based on Chapter 2.4 Exercise 1)

Assume 4 binary digit accuracy for the following computations.

  1. Write out the binary representation for the approximate value of 1/4.

0.0100

  1. Write out the binary representation for the approximate value of 3/4.

0.1100

Problem 4: Extract Non-Missing Values

Output only the non-missing elements of a vector x <- c(2, 4, NA, NA, 9, NaN, 0)

Hint: Create a logical vector that indicates whether each element of x is missing (NA or NaN) or not. Use (a transformed version of) this logical vector to extract the elements of x that are not missing, which are 2, 4, 9, 0.

x<- c(2, 4, NA, NA, 9, NaN, 0)
# Answer:
x <- c(2, 4, NA, NA, 9, NaN, 0)
not_missing <- !is.na(x)
x[not_missing]
## [1] 2 4 9 0

Problem 5: Data Imputation

Write code that takes a vector x and outputs the vector x with all of its missing (NA or NaN) values replaced with mean(x, na.rm = TRUE).

Make sure that your code works for the following vectors as x:

x <- c(2, NA, 5, 7, NA, 10, 12, NA)
x <- c(8, 7, 333, NA, NaN)
x <- c(0, 0, 0, 0, 0)
# Answer:
x <- c(2, NA, 5, 7, NA, 10, 12, NA)
x[is.na(x) | is.nan(x)] <- mean(x[!(is.na(x) | is.nan(x))])
print(x)
## [1]  2.0  7.2  5.0  7.0  7.2 10.0 12.0  7.2
# Second case
x <- c(8, 7, 333, NA, NaN)
x[is.na(x) | is.nan(x)] <- mean(x[!(is.na(x) | is.nan(x))])
print(x)
## [1]   8   7 333 116 116
# Third case (no missing values)
x <- c(0, 0, 0, 0, 0)
x[is.na(x) | is.nan(x)] <- mean(x[!(is.na(x) | is.nan(x))])
x
## [1] 0 0 0 0 0