Другие объекты

Списки

Задание 1

Создайте список l1, где первый элемент - случайные пять элементов вектора letters, а второй - пять случайных значений из вектора seq(from = 1, to = 50, by = 7)

l1 <- list(sample(letters, 5),
           sample(seq(from = 1, to = 50, by = 7), 5))
l1
## [[1]]
## [1] "g" "y" "t" "d" "x"
## 
## [[2]]
## [1]  8 29 22 50  1

Задание 2

Модифицируйте предыдущее задание - создайте именованный список l1, где первый элемент назван как id, а второй элемент - value.

l1 <- list(id = sample(letters, 5),
           value = sample(seq(from = 1, to = 50, by = 7), 5))
l1
## $id
## [1] "u" "c" "y" "t" "e"
## 
## $value
## [1] 15  8 29  1 50

Задание 3

Выведите на печать структуру списка l1.

str(l1)
## List of 2
##  $ id   : chr [1:5] "u" "c" "y" "t" ...
##  $ value: num [1:5] 15 8 29 1 50

Задание 4

C помощью $ вызовите второй элемент списка l1. Сделайте это еще и через индекс.

# решение через $
l1$value
## [1] 15  8 29  1 50
# решение через индекс
l1[2]
## $value
## [1] 15  8 29  1 50

Задание 5

Вызовите первый и второй элементы первого элемента списка l1. Сделайте это через оператор $, а также через индексы.

# решение через $
l1$id[1:2]
## [1] "u" "c"
# решение через индексы
l1[[1]][1:2]
## [1] "u" "c"
l1[['id']][1:2]
## [1] "u" "c"

Факторы

Задание 1

Превратите вектор f1 <- c('1-1', '1-3', '1-5', '1-8', '1-10') в фактор. Выведите на печать.

f1 <- c('1-1', '1-3', '1-5', '1-8', '1-10')
f1 <- factor(f1)
f1
## [1] 1-1  1-3  1-5  1-8  1-10
## Levels: 1-1 1-10 1-3 1-5 1-8

0.0.0.1 Задание 2

Выведите уровни фактора f1.

levels(f1)
## [1] "1-1"  "1-10" "1-3"  "1-5"  "1-8"

0.0.0.2 Задание 3

Задайте уровни фактора f1 так, чтобы при сортировке значение 1-10 было последним.

f1 <- factor(f1, levels = c('1-1', '1-3', '1-5', '1-8', '1-10'))
sort(f1)
## [1] 1-1  1-3  1-5  1-8  1-10
## Levels: 1-1 1-3 1-5 1-8 1-10

0.0.0.3 Задание 4

Удалите первые два значения f1. Проверьте, какие сейчас остались уровни фактора.

f1 <- f1[-c(1, 2)]
f1
## [1] 1-5  1-8  1-10
## Levels: 1-1 1-3 1-5 1-8 1-10

0.0.0.4 Задание 5

Преобразуйте f1 в числовой тип. Проинтерпретируйте результат.

f1
## [1] 1-5  1-8  1-10
## Levels: 1-1 1-3 1-5 1-8 1-10
## [1] 3 4 5

При преобразовании в numeric уровни фактора конвертируются в ряд 1, 2 и т. д. В примере результатом преобразовании будут числовые значения уровней тех элементов, которые присутствуют в объекте.

Пропущенные значения, NA's

Задание 1

Создайте вектор vec <- sample(100, 20). Присвойте трем случайным значениям значение NA.

vec <- sample(100, 20)
vec[sample(length(vec), 3)] <- NA
vec
##  [1] 17  4 38 73 NA 59 79 35 22 61 NA 28 68 56 43  2 97 NA 65 74

Задание 2

Проверьте каждый элемент вектора vec, является ли он пропущенным или нет.

is.na(vec)
##  [1] FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE
## [13] FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE

Задание 3

Подсчитайте количество пропущенных значений в векторе vec

Здесь можно воспользоваться тем, что логическое значение TRUE математическими функциями интерпертируется как 1 (а FALSE как 0).

sum(is.na(vec))
## [1] 3

Задание 4

Замените все пропущенные значения в векторе vec на среднее по вектору.

vec[is.na(vec)] <- mean(vec, na.rm = TRUE)
vec
##  [1] 17.00000  4.00000 38.00000 73.00000 48.29412 59.00000 79.00000 35.00000
##  [9] 22.00000 61.00000 48.29412 28.00000 68.00000 56.00000 43.00000  2.00000
## [17] 97.00000 48.29412 65.00000 74.00000

Задание 5

В списке l1 <- list(id = sample(letters, 5), value = sample(seq(from = 1, to = 50, by = 7), 5)) удалите второй элемент.

При работе с списками удалить подсписок можно как через переприсвоение списка (просто не выбрать определенный элемент индексом), так и через присвоение элементу, который необходимо удалить, значения NULL. Стоит учитывать, что подобное поведение неприменимо к векторам и матрицам.

l1 <- list(id = sample(letters, 5), 
           value = sample(seq(from = 1, to = 50, by = 7), 5))
str(l1)
## List of 2
##  $ id   : chr [1:5] "a" "h" "i" "b" ...
##  $ value: num [1:5] 22 29 36 43 15
# удаляем через присвоение значения NULL
l1[2] <- NULL
str(l1)
## List of 1
##  $ id: chr [1:5] "a" "h" "i" "b" ...