Сегодня мы продолжим работать с таблицами, и давайте загрузим таблицу с прошлой лекции. Давайте загрузим ее по ссылке (так тоже можно):

dat <- read.csv("http://math-info.hse.ru/f/2018-19/comm-math/marketing.csv")

Удаление пропущенных значений

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

dat <- na.omit(dat)

Выбор переменных

Если мы хотим обратиться к конкретной переменной и рассматривать ее как вектор элементов, нужно использовать символ $.

dat$Promotion # номер рекламной кампании
##   [1] 3 3 3 3 2 2 2 2 1 1 1 2 2 2 2 2 2 3 3 3 3 1 1 1 1 2 2 2 2 1 1 1 1 2 2
##  [36] 2 2 3 3 3 3 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
##  [71] 3 3 3 3 3 3 1 1 1 1 3 3 3 3 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 1 1
## [106] 1 1 1 1 1 1 2 2 2 2 3 3 3 2 2 2 2 1 1 1 1 2 2 2 2 3 3 3 3 3 3 3 1 1 1
## [141] 1 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 2 2 2 3 3 3 1 1 1 1 1 1 1 2 2 2 1 1 1
## [176] 1 2 2 2 2 2 2 2 1 1 1 1 3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3
## [211] 3 3 3 2 2 2 2 2 2 2 2 1 1 1 1 3 3 3 3 1 1 1 2 2 2 2 3 3 3 3 3 3 3 3 3
## [246] 3 2 2 2 2 2 2 2 2 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 1 1 1 1 2 2 2
## [281] 2 3 3 3 3 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 3 3
## [316] 3 3 3 3 3 3 3 3 3 3 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 3 3 3 3 3 1
## [351] 1 1 1 2 2 2 2 2 2 2 2 3 3 3 3 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 3 3 3 3 3
## [386] 1 1 1 1 2 2 2 2 2 2 2 2 3 3 3 3 1 1 1 1 3 3 3 3 1 1 1 1 2 2 2 2 3 3 3
## [421] 3 1 1 1 1 3 3 3 3 3 3 3 3 2 2 2 2 3 3 3 3 3 3 3 3 1 1 1 1 2 2 2 2 1 1
## [456] 1 1 3 3 3 3 2 2 2 2 3 3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 2
## [491] 2 2 2 2 2 2 2 1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 2 3 3 3 3 1 1 1 1 1 1 1 1
## [526] 2 2 2 2

Attach и detach

Мы можем “закрепить” базу данных с помощью команды attach, чтобы обращаться к переменным более простым способом:

attach(dat) # заодно покажет, какие переменные есть
head(Promotion) # имя переменной как есть, без $
## [1] 3 3 3 3 2 2

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

detach(dat) # возвращаем обратно

Создание и добавление в базу новых переменных

Допустим, мы хотим добавить в базу переменную Campaign, которая будет содержать индекс рекламной кампании, но сохраненный как фактор (factor). Для этого нужно через $ задать имя новой переменной и присвоить ей значение:

dat$Campaign <- factor(dat$Promotion)
#View(dat)

Фильтрация наблюдений

Часто при работе с данными возникает необходимость выбрать несколько переменных или определенную группу наблюдений и анализировать их отдельно - чтобы не загружать каждый раз огромную базу с ненужными показателями.

Можем выбрать несколько переменных (столбцов) и сохранить их в другую базу:

dat[2:4] # 2 и 4 - порядковые номера столбцов, от 2 до 4

Получится маленькая база из трех переменных.

И сохраним ее как новую базу dat1:

dat1 <- dat[2:4] 
#View(dat1)

Если выбираем столбцы не подряд, обязательно их номера нужно оформить в виде вектора:

dat[c(1, 3)] # не просто dat[1, 3]

В противном случае получится совсем не то:

dat[1, 3] 
## [1] 1

Это «совсем не то» связано с тем, что, когда мы указываем в квадратных скобках числа через запятую, R воспринимает первое число как номер строки, второе число - как номер столбца (как в матрицах - сначала строка, потом столбец). Можем посмотреть на исходную базу и убедиться в этом:

#View(dat)

Но таким образом мы можем выбирать строки (наблюдения):

dat[, 1:3] # берем все наблюдения (строки), первые 3 переменные (столбцы)

Или столбцы:

dat[1:4, ] # берем первые 4 наблюдения (строки), все переменные (столбцы)

Фильтрация по условиям

Если хотим отобрать из базы определенные наблюдения, это тоже можно сделать с помощью subset() («фильтры»). Например, хотим выбрать данные за первую неделю:

sub_educ <- subset(dat, Week == 1)
#View(sub_educ)

Для указания нескольких условий опять потребуются логические операторы:

y <- subset(dat, Week == 1 & MarketSize == "Medium") # несколько условий
#View(y)

Конечно, можем отбирать наблюдения и переменные одновременно:

z <- subset(dat, Week == 1 & MarketSize == "Medium", select = c(MarketID, LocationID, AgeOfStore)) 
#View(z)

Удаление переменных

Чтобы удалить переменные, можно действовать двумя способами:

  1. удалить их из базы

  2. оставить все остальные переменные в базе

По смыслу это одно и то же. И то, и другое чаще всего осуществляется с помощью функции subset().

Допустим, мы хотим выбрать переменные MarketID и SalesInThousands и сохранить их в новую базу:

dat1 <- subset(dat, select = c(MarketID, SalesInThousands)) # указываем имя базы, оставляем Educ и Female
#View(dat)

А теперь хотим оставить все, кроме переменной Week:

dat2 <- subset(dat, select = -Week) # перед ней стоит минус
#View(dat1)