Часть 1

  1. Заполните небольшую анонимную анкету по ссылке: https://goo.gl/forms/i4FqIW3lCEZdL3Ys2.

  2. Дождитесь, когда ваши одногруппники заполнят анкету. По сигналу преподавателя пройдите по этой ссылке и посмотрите на полученные результаты. Выберите 10 анкет, которые заинтересовали вас больше всего.

Часть 2

Используя материалы практического занятия, создайте в R следующие векторы и сохраните в них данные по выбранным 10 студентам.

Обратите внимание: придумайте разумную систему кодирования для ваших данных. Например, любимые предметы в школе можно закодировать числами от 1 до 5, пол – 0 и 1 или буквами “F” и “M”, и так далее. Подумайте, какие из полученных векторов должны быть числовыми, а какие факторными (не-числовыми).

Решение.

На занятии мы договорились о следующем:

  1. Пропущенные значения (нет ответа, например, если студент не сдавал ЕГЭ, или странные значения) обозначать NA. Это специальный «пустой» тип в R, от английского Not applicable.

  2. Векторы fav_subjи sex сделать текстовыми: любимый предмет обозначать первой буквой названия на английском языке ("B" - Biology, "R" - Russian language, "F" - Foreign language, "M" - Math, "N"- None, ), а пол кодировать буквами F и M (женский и мужской) . Вектор place сделать факторным, где 0 - это Москва, 1 - не Москва.

height <- c(176, 157, 184, 158, 160, 164, 174, 177, 170, 164)
math <- c(68, 70, 72, 70, 50, 72, 61, 72, 76, 74)
biology <- c(NA, 63, 93, 70, 84, 89, 69, 77, 74, 70)
fav_subj <- c("F", "R", "B", "N", "F", "M", "R", "B", "B", "R")
sex <- c("M", "F", "M", "F", "F", "F", "F", "M", "F", "F")
place <- factor(c(1, 0, 1, 1, 1, 0, 0, 1, 1, 0))
length <- c(27, 22, 26, 18, 30, 25, 30, 25, 25, 34)
angle <- c(40, 30, 30, 30, 30, 23, 25, 30, 25, 27)

Часть 3

Создайте из полученных векторов небольшую табличку, датафрейм. Сделать это можно с помощью функции cbind.data.frame(). Пример:

name <- c("Anna", "Maria", "Isabella")
age <- c(23, 24, 25)
info <- cbind.data.frame(name, age)
info  # вуаля
##       name age
## 1     Anna  23
## 2    Maria  24
## 3 Isabella  25

Решение.

info <- cbind.data.frame(height, math, biology, 
                        fav_subj, sex, place, 
                        length, angle)

Чтобы открыть таблицу в удобном режиме просмотра, нужно кликнуть на название датафрейма во вкладке Environment справа (именно на само название, не на стрелочку в голубом кружке). Она откроется в отдельной вкладке, которую потом можно будет растянуть в отдельное окно. Альтернативный вариант - сделать то же, но с помощью кода:

View(info)

Теперь посмотрим, что с этой табличкой можно делать. Во-первых, посмотреть на её структуру:

str(info)
## 'data.frame':    10 obs. of  8 variables:
##  $ height  : num  176 157 184 158 160 164 174 177 170 164
##  $ math    : num  68 70 72 70 50 72 61 72 76 74
##  $ biology : num  NA 63 93 70 84 89 69 77 74 70
##  $ fav_subj: Factor w/ 5 levels "B","F","M","N",..: 2 5 1 4 2 3 5 1 1 5
##  $ sex     : Factor w/ 2 levels "F","M": 2 1 2 1 1 1 1 2 1 1
##  $ place   : Factor w/ 2 levels "0","1": 2 1 2 2 2 1 1 2 2 1
##  $ length  : num  27 22 26 18 30 25 30 25 25 34
##  $ angle   : num  40 30 30 30 30 23 25 30 25 27

Функция str() выводит на экран число строк или наблюдений (10 obs. - observations) и число столбцов или переменных (8 variables) в таблице. Также она выводит названия столбцов, их тип и первые несколько значений.

Чтобы получить описательные статистики, то есть сводную информацию по характеристикам в таблице, нам понадобится функция summary():

summary(info)
##      height           math         biology      fav_subj sex   place
##  Min.   :157.0   Min.   :50.0   Min.   :63.00   B:3      F:7   0:4  
##  1st Qu.:161.0   1st Qu.:68.5   1st Qu.:70.00   F:2      M:3   1:6  
##  Median :167.0   Median :71.0   Median :74.00   M:1                 
##  Mean   :168.4   Mean   :68.5   Mean   :76.56   N:1                 
##  3rd Qu.:175.5   3rd Qu.:72.0   3rd Qu.:84.00   R:3                 
##  Max.   :184.0   Max.   :76.0   Max.   :93.00                       
##                                 NA's   :1                           
##      length          angle     
##  Min.   :18.00   Min.   :23.0  
##  1st Qu.:25.00   1st Qu.:25.5  
##  Median :25.50   Median :30.0  
##  Mean   :26.20   Mean   :29.0  
##  3rd Qu.:29.25   3rd Qu.:30.0  
##  Max.   :34.00   Max.   :40.0  
## 

Все значения, которые здесь есть, мы интерпретировать не будем, вам ещё предстоит узнать о них на лекциях, но кое-что мы можем пояснить уже сейчас. Так, из показателей, понятных всем, для числовых переменных R выводит минимальное значение (Min.), максимальное значение (Max.) и среднее арифметическое (Mean). Для текстовых или факторных переменных выводятся абсолютные частоты - сколько раз то или иное значение встретилось в столбце таблицы. Например, в нашей таблице info, есть два респондента женского пола, 3 - мужского, плюс, один респондент свой пол не указал (NA). Точнее, указал, но сказал, что пол паркетный :)

Если нас интересует конкретный столбец таблицы, можем его выбрать, указав через $ его название:

info$fav_subj  # выбрали любимый предмет
##  [1] F R B N F M R B B R
## Levels: B F M N R

Аналогичным образом можем запросить сводную информацию не для всей таблицы, а для одного столбца:

summary(info$length)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   18.00   25.00   25.50   26.20   29.25   34.00

Или воспользоваться функцией table(), которая считает, сколько раз каждое значение переменной встретилось в таблице:

table(info$fav_subj)
## 
## B F M N R 
## 3 2 1 1 3

Для числовых столбцов тоже работает:

table(info$length)
## 
## 18 22 25 26 27 30 34 
##  1  1  3  1  1  2  1

Напоследок посмотрим, как запросить help по какой-нибудь функции, чтобы узнать, что она делает и как работает. Для этого достаточно поставить знак вопроса и написать название функции. Запросим помощь по функции mean():

?mean  # см. вкладку Help

Альтернатива - использовать функцию help(), причём запрашивать помощь можно и по встроенным датафреймам R, по учебным таблицам с данными. Попросим R рассказать что-то о датафрейме beavers, который содержит данные для исследования температуры тела бобров :)

help(beavers) # см. вкладку Help