Семинар 1. Переменные и векторы

Алла Тамбовцева

25 января 2018 г

Часть 1

Задача 1.

В двух переменных сохранены некоторые значения:

x <- 2
y <- 4

Напишите код, который позволит поменять значения в переменных x и y местами, то есть получить следующее:

x
## [1] 4
y
## [1] 2

Внимание: Ваш код должен работать для любых значений x, y.

Задача 2.

x <- 3.5
y <- "2,6"
z <- 1.78
h <- TRUE
  • Определите типы переменных.
  • Сделайте переменную h целочисленной.
  • Сделайте переменную y числовой (обратите внимание на запятую!).
  • Сделайте переменную x текстовой.

Задача 3.

Исследователь сохранил доход респондента в переменную dohod:

dohod <- 1573

Исследователь передумал и решил изменить значение этой переменной - сохранить в нее натуральный логарифм дохода. Помогите ему!

Часть 2

Задача 1.

Дан вектор g, в котором хранятся следующие значения:

1, 0, 2, 3, 6, 8, 12, 15, 0, NA, NA, 9, 4, 16, 2, 0

Выведите на экран:

  • первый элемент вектора
  • последний элемент вектора
  • элементы вектора с третьего по пятый включительно
  • элементы вектора, которые равны 2
  • элементы вектора, которые больше 4
  • элементы вектора, которые кратны 3 (делятся на 3 без остатка)
  • элементы вектора, которые больше 4 и кратны 3
  • элементы вектора, которые или меньше 1, или больше 5
  • индексы элементов, которые равны 0
  • индексы элементов, которые не меньше 2 и не больше 8

Задача 2.

Напишите код, который заменяет последний элемент вектора на пропущенное значение (NA). Ваш код должен работать для любого вектора (любой длины).

Задача 3.

Напишите код, который выводит на экран индексы пропущенных значений в векторе.

Задача 4.

Напишите код, который считает, сколько пропущенных значений в векторе.

Задача 5.

Напишите код, который позволяет создать вектор из id (уникальных номеров) респондентов, если известно, что в опросе участвовало 100 респондентов.

Задача 6.

Известно, что в базе данных хранятся показатели по 3 странам за 5 лет. Таблица выглядит примерно так:

country year
1 France 2000
2 France 2001
3 France 2002
4 France 2003
5 France 2004
6 Italy 2000
7 Italy 2001
8 Italy 2002
9 Italy 2003
10 Italy 2004
11 Spain 2000
12 Spain 2001
13 Spain 2002
14 Spain 2003
15 Spain 2004
  • Создайте вектор с названиями стран (первый столбец).
  • Создайте вектор, который мог бы послужить вторым столбцом в таблице, представленной выше (подумайте, какую длину имеет этот вектор).

Задача 7.

Исследователю из задачи 3 из части 1 понравилось, как Вы работаете в R, и теперь он решил создать вектор income, в котором сохранены доходы нескольких респондентов:

income <- c(10000, 32000, 28000, 150000, 65000, 1573)

Исследователю нужно получить вектор income_class, состоящий из 0 и 1: 0 ставится, если доход респондента ниже среднего дохода, а 1 - если больше или равен среднему доходу.

Подсказка: сначала можно посчитать среднее значение по вектору income и сохранить его в какую-нибудь переменную. Пользоваться встроенной функцией mean() нельзя.

Часть 3

  1. Создайте матрицу размерности 3 * 4, состоящую из 3, а затем измените некоторые ее элементы так, чтобы получить следующее:

    [3 3 4 3]
    [1 3 3 3]
    [3 NA 3 1]
  2. Создайте из следующих векторов матрицу, такую, что:

  • векторы являются столбцами матрицы
  • векторы являются строками матрицы
a <- c(1, 3, 4, 9, NA)
b <- c(5, 6, 7, 0, 2)
c <- c(9, 10, 13, 1, 20)

Дайте (новые) названия строкам и столбцам матрицы.

  1. Может ли матрица состоять из элементов разных типов? Проверьте: составьте матрицу из следующих векторов (по столбцам):
names <- c("Jane", "Michael", "Mary", "George")
ages <- c(8, 6, 28, 45)
gender <- c(0, 1, 0, 1)

Если получилось не то, что хотелось, подумайте, как это можно исправить, не теряя информации, которая сохранена в векторах.

Добавьте в матрицу столбец age_sq – возраст в квадрате.

  1. Создайте из векторов из задачи 3 список (list) и назовите его info.
  • Выведите на экран имя Michael (обращаясь к элементам списка, конечно).

  • Выведите на экран вектор gender.

  • Назовите векторы в списке name, age, gender. Выведите на экран элементы вектора name.

  • Добавьте в список вектор drinks, в котором сохранены значения: juice, tea, rum, coffee.

  • Добавьте в список данные по еще одному человеку: John, 2 года, мужской пол, любит молоко.

  1. В R есть функция strsplit(), которая позволяет разбивать строки (текстовые переменные) на части по определенным символам.

Пусть у нас есть строка s:

s <- "a,b,c,d"

Мы хотим получить из нее вектор из 6 букв. Применям функцию:

let <- strsplit(s, ",")

Получили почти то, что хотели. Почему почти? Потому что получили не вектор, а список!

class(let)
## [1] "list"

Превратим в вектор:

unlist(let)
## [1] "a" "b" "c" "d"

Теперь все в порядке, получили вектор из четырех элементов.

Теперь задание. Дана строка index:

index <- "0,72;0,38;0,99;0,81;0,15;0,22;0,16;0,4;0,24"

Получите из этой строки числовой вектор I.