Часть 1

  1. Поставьте библиотеку randomNames. Обратитесь к ней через library().
install.packages("randomNames")
library(randomNames)
  1. Создайте вектор из 100 испанских имен:
set.seed(1234) # чтобы у всех получались одинаковые результаты
names <- randomNames(100, which.names = "first", ethnicity = 4)
  1. Будем считать, что эти 100 имен – имена опрошенных респондентов. Создайте вектор со значениями возраста респондентов:
ages <- sample(16:75, 100, replace = TRUE) # replace = TRUE - с повторяющимися значениями

А также вектор polit – политические взгляды респондентов:

views <- c("right", "left", "moderate", "indifferent")
polit <- sample(views, 100, replace = TRUE)

Создайте из полученных трёх векторов датафрейм.

info <- cbind.data.frame(names, ages, polit)
head(info)
##       names ages       polit
## 1      Luis   55        left
## 2    Briana   47 indifferent
## 3  Courtney   35    moderate
## 4    Mariah   62        left
## 5  Lateisha   47 indifferent
## 6 Kassandra   59        left
  1. Создайте столбец id с номерами респондентов.
info$id <- 1:100
  1. Определите, сколько среди респондентов людей в возрасте от 25 до 30 лет (включительно). Определите, какую долю респондентов в нашей сымпровизированной выборке составляют люди в возрасте от 25 до 30 лет. Выразите эту долю в процентах.
n <- nrow(info[info$ages >= 25 & info$ages <= 30, ])
n
## [1] 6
# доля в процентах
n / nrow(info) * 100
## [1] 6
  1. Создайте «факторный» вектор политических взглядов polit_views. Сколько у полученного фактора уровней? Добавьте в датафрейм столбец polit_views.
info$polit_views <- factor(info$polit)

Часть 2

  1. Загрузите файл Firms.csv. Почитать про базу можно здесь. Посмотрите на таблицу.
df <- read.csv("Firms.csv")
  1. Сколько в датафрейме наблюдений? Сколько переменных? Какие это переменные?
str(df)
## 'data.frame':    248 obs. of  5 variables:
##  $ X         : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ assets    : int  147670 133000 113230 85418 75477 40742 40140 26866 24500 23700 ...
##  $ sector    : Factor w/ 10 levels "AGR","BNK","CON",..: 2 2 2 2 2 4 9 2 9 8 ...
##  $ nation    : Factor w/ 4 levels "CAN","OTH","UK",..: 1 1 1 1 1 1 1 1 1 4 ...
##  $ interlocks: int  87 107 94 48 66 69 46 16 77 6 ...
  1. Сколько в датафрейме полностью заполненных строк (наблюдений)? Выведите (если такие есть) наблюдения, содержащие пропущенные значения на экран.
# полностью
nrow(df[complete.cases(df), ])
## [1] 248
# содержащие NA - таких нет
nrow(df[!complete.cases(df), ])
## [1] 0
  1. Отфильтруйте наблюдения в таблице согласно следующим критериям:

    • фирмы с активами от 10000 до 20000 (включительно);
# способ 1
dat1 <- df[df$assets >= 10000 & df$assets <= 20000, ]

# способ 2
dat1 <- subset(df, assets >= 10000 & assets <= 20000)
* фирмы, число управляющих позиций, совместных с другими фирмами, которых не превышает 30;
# способ 1
dat2 <- df[df$interlocks <= 30, ]

# способ 2
dat2 <- subset(df, interlocks <= 30)
* фирмы транспортного сектора (`TRN`) под руководством управляющих из Канады (`CAN`);
# 1 способ
dat3 <- df[df$sector == "TRN" & df$nation == "CAN", ]

# 2 способ
dat3 <- subset(df, sector == "TRN" & nation == "CAN")
  1. Создате переменную «натуральный логарифм активов» (log_assets) и добавьте её в датафрейм.
df$log_assets <- log(df$assets)
  1. Постройте график, который может проиллюстрировать, какие паттерны пропущенных наблюдений можно зафиксировать в таблице.
# неактуально - таких нет
  1. Удалите пропущенные значения из базы данных.
# тоже не очень актуально, но пусть будет
df <- na.omit(df)
  1. Сохраните измененную базу данных в формате Stata (файл “Firms.dta”)
library(foreign)
write.dta(df, "Firms.dta")