ГлавнаяСеместр 2
Обновлено: 06 марта 2017

Для семинара

Packages

Установить и подключить пакеты

    library(dplyr)
    library(tidyr)
    library(reshape2)

Если файл скачен, то можно следующим образом закачать данные:

x <- read.csv(file = "score_2.csv", header = T, sep = ";", dec = ",")
head(x)
##   n                           fio group  sem score
## 1 1   Аксенова Анна Александровна    31 36.0  36.0
## 2 2 Аскольская Надежда Кирилловна    22 24.0  24.0
## 3 3    Ахмедова Вазифа Курбановна    11  0.0   0.0
## 4 4     Ахметзянова Дарья Юрьевна    22 12.0  12.0
## 5 5       Ахметова Зиля Фаридовна    22 30.0  30.0
## 6 6    Буханов Денис Владимирович    21 13.5  13.5

Можно непосредственно из сети.

x <- read.csv(file = "https://raw.githubusercontent.com/leonovmx/info/gh-pages/s2/score_2.csv", 
    header = T, sep = ";", dec = ",")
head(x)
##   n                           fio group  sem score
## 1 1   Аксенова Анна Александровна    31 36.0  36.0
## 2 2 Аскольская Надежда Кирилловна    22 24.0  24.0
## 3 3    Ахмедова Вазифа Курбановна    11  0.0   0.0
## 4 4     Ахметзянова Дарья Юрьевна    22 12.0  12.0
## 5 5       Ахметова Зиля Фаридовна    22 30.0  30.0
## 6 6    Буханов Денис Владимирович    21 13.5  13.5

Apply family

sapply(X = x[,-2], FUN = mean)
##        n    group      sem    score 
## 38.50000 21.55263 16.11842 16.11842
tapply(X = x$sem, INDEX = x$group, FUN = mean)
##       11       12       21       22       31       32 
##  0.00000  0.00000 25.09375 20.50000 24.06250 20.15385
tapply(X = x$sem, INDEX = x$group, FUN = max)
## 11 12 21 22 31 32 
##  0  0 40 40 40 40
tapply(X = x$sem, INDEX = x$group, FUN = min)
## 11 12 21 22 31 32 
##  0  0  0  0  8  0
head(x)
##   n                           fio group  sem score
## 1 1   Аксенова Анна Александровна    31 36.0  36.0
## 2 2 Аскольская Надежда Кирилловна    22 24.0  24.0
## 3 3    Ахмедова Вазифа Курбановна    11  0.0   0.0
## 4 4     Ахметзянова Дарья Юрьевна    22 12.0  12.0
## 5 5       Ахметова Зиля Фаридовна    22 30.0  30.0
## 6 6    Буханов Денис Владимирович    21 13.5  13.5

Reshape

Позволяет агрегировать данные

# reshape
y <- melt(data = x, id.vars = c("n", "fio","group"))
head(y)
##   n                           fio group variable value
## 1 1   Аксенова Анна Александровна    31      sem  36.0
## 2 2 Аскольская Надежда Кирилловна    22      sem  24.0
## 3 3    Ахмедова Вазифа Курбановна    11      sem   0.0
## 4 4     Ахметзянова Дарья Юрьевна    22      sem  12.0
## 5 5       Ахметова Зиля Фаридовна    22      sem  30.0
## 6 6    Буханов Денис Владимирович    21      sem  13.5
r <- dcast(data = y, formula = group ~ variable, fun.aggregate = mean)
head(r)
##   group      sem    score
## 1    11  0.00000  0.00000
## 2    12  0.00000  0.00000
## 3    21 25.09375 25.09375
## 4    22 20.50000 20.50000
## 5    31 24.06250 24.06250
## 6    32 20.15385 20.15385

tidyr

Для перегруппировки данных

head(gather(x, what, score, sem:score))
##   n                           fio group what score
## 1 1   Аксенова Анна Александровна    31  sem  36.0
## 2 2 Аскольская Надежда Кирилловна    22  sem  24.0
## 3 3    Ахмедова Вазифа Курбановна    11  sem   0.0
## 4 4     Ахметзянова Дарья Юрьевна    22  sem  12.0
## 5 5       Ахметова Зиля Фаридовна    22  sem  30.0
## 6 6    Буханов Денис Владимирович    21  sem  13.5
head(gather(x[,-2], what, score, -n))
##   n  what score
## 1 1 group    31
## 2 2 group    22
## 3 3 group    11
## 4 4 group    22
## 5 5 group    22
## 6 6 group    21
q <- gather(x, what, score, -n, -fio)
head(q)
##   n                           fio  what score
## 1 1   Аксенова Анна Александровна group    31
## 2 2 Аскольская Надежда Кирилловна group    22
## 3 3    Ахмедова Вазифа Курбановна group    11
## 4 4     Ахметзянова Дарья Юрьевна group    22
## 5 5       Ахметова Зиля Фаридовна group    22
## 6 6    Буханов Денис Владимирович group    21
head(spread(q, what, score))
##   n                           fio group score  sem
## 1 1   Аксенова Анна Александровна    31  36.0 36.0
## 2 2 Аскольская Надежда Кирилловна    22  24.0 24.0
## 3 3    Ахмедова Вазифа Курбановна    11   0.0  0.0
## 4 4     Ахметзянова Дарья Юрьевна    22  12.0 12.0
## 5 5       Ахметова Зиля Фаридовна    22  30.0 30.0
## 6 6    Буханов Денис Владимирович    21  13.5 13.5

dplyr

Для фильтрации, добавлении новых переменных, сортировки

head(dplyr::arrange(x, group))
##    n                          fio group sem score
## 1  3   Ахмедова Вазифа Курбановна    11   0     0
## 2  9 Воеводина Алена Вячеславовна    11   0     0
## 3 11      Гаджиева Аида Тимуровна    11   0     0
## 4 15     Горячева Олеся Андреевна    11   0     0
## 5 16   Гулиева Залина Адсаламовна    11   0     0
## 6 17     Гулиева Эсет Адсаламовна    11   0     0
head(dplyr::arrange(x, group, desc(score)))
##    n                          fio group sem score
## 1  3   Ахмедова Вазифа Курбановна    11   0     0
## 2  9 Воеводина Алена Вячеславовна    11   0     0
## 3 11      Гаджиева Аида Тимуровна    11   0     0
## 4 15     Горячева Олеся Андреевна    11   0     0
## 5 16   Гулиева Залина Адсаламовна    11   0     0
## 6 17     Гулиева Эсет Адсаламовна    11   0     0
head(dplyr::filter(x, group == 21))
##    n                          fio group  sem score
## 1  6   Буханов Денис Владимирович    21 13.5  13.5
## 2  7     Ваганова Дарья Андреевна    21 24.0  24.0
## 3 19    Гуфранова Анна Хайдаровна    21  0.0   0.0
## 4 23 Дугарова Александра Игоревна    21 40.0  40.0
## 5 24 Дударевич Полина Анатольевна    21  0.0   0.0
## 6 31       Ипатьев Кирилл Юрьевич    21 24.0  24.0

А тут применение %>%

x %>% 
    arrange(desc(score), desc(score)) %>% 
    dplyr::filter(group == 21 | group == 31) %>% 
    dplyr::mutate(nexvatilo = 40 - score,
                  nx_zada4 = ceiling(nexvatilo/2)) %>% 
    dplyr::filter(score != 40) %>% 
    head(4)
##    n                         fio group  sem score nexvatilo nx_zada4
## 1  1 Аксенова Анна Александровна    31 36.0  36.0       4.0        2
## 2 37 Коннова Анастасия Сергеевна    21 32.0  32.0       8.0        4
## 3 57     Руч Камила Хайруллаевна    31 31.5  31.5       8.5        5
## 4  7    Ваганова Дарья Андреевна    21 24.0  24.0      16.0        8