dplyr. Решения.На этом семинаре мы будем работать с файлом, содержащим информацию о годах постройки жилых домов в Москве. Данные достаточно новые, а для вдохновения посмотрите, что можно получить, используя эту информацию.
Мы, правда, займемся пока вещами попроще.
moscow-buildings.csv и сохраните ее как df_build. Посмотрите на датафрейм.library(dplyr)
df_build <- read.csv("https://raw.githubusercontent.com/allatambov/R-programming-3/master/seminars/sem4-08-12/moscow-buildings.csv", encoding="UTF-8")
# View(df_build)
dplyr, удалите из базы данных строки, в которых значения года постройки не указаны (“н.д.”), а после превратите столбец year в числовой. R будет воспринимать столбец как факторный, поэтому нужно сначала превратить его в текстовый, а затем - в числовой или использовать специальную функцию levels().df_build <- df_build %>% filter(house_year != "н.д.") %>% 
  mutate(house_year = as.numeric(levels(house_year)[house_year]))
df_build %>% summarise(min = min(house_year), max = max(house_year))
##   min      max
## 1   5 19781962
df_build <- df_build %>% filter(house_year > 1600 & house_year < 2018)
basm_data.basm_data <- df_build %>% filter(area_name == "муниципальный округ Басманный")
df_build %>% group_by(area_name) %>% tally %>% View
Найдите средний возраст дома (возраст - в годах, считаем от 2018) по каждому району.
Подсказка: сначала добавьте переменную house_age («возраст дома»).
df_build <- df_build %>% mutate(house_age = 2018 - house_year)
df_build %>% group_by(area_name) %>% 
  summarise(avg_age = mean(house_age))
## # A tibble: 124 x 2
##    area_name                           avg_age
##    <fct>                                 <dbl>
##  1 муниципальный округ Академический      52.7
##  2 муниципальный округ Алексеевский       55.2
##  3 муниципальный округ Алтуфьевский       46.3
##  4 муниципальный округ Арбат              87.5
##  5 муниципальный округ Аэропорт           55.1
##  6 муниципальный округ Бабушкинский       50.1
##  7 муниципальный округ Басманный          84.3
##  8 муниципальный округ Беговой            32.5
##  9 муниципальный округ Бескудниковский    37.2
## 10 муниципальный округ Бибирево           39.5
## # ... with 114 more rowsНайдите улицу с самым старым домом.
df_build %>% arrange(house_year) %>% head(1) %>% select(street_name)
##       street_name
## 1 40 лет Октября
Сейчас вам предлагается поработать с файлом CPDS.csv, который содержит показатели из Comparative Political Data Set. Познакомиться с проектом и codebook для таблицы можно здесь.
CPDS.csv, учитывая, что десятичный разделитель - запятая. Сделать так, чтобы текстовые столбцы считывались как текст, а не как факторы. Подсказка: аргумент stringsAsFactors = FALSE в функции read.csv().cp <- read.csv("http://math-info.hse.ru/f/2018-19/pep/hw/CPDS.csv", dec = ",", stringsAsFactors = FALSE)
log_pop с логарифмированными значения численности населения.cp <- cp %>% mutate(log_pop = log(pop))
country, year, poco, eu, gov_right1, gov_cent1, gov_left1, log_pop и сохранить их как small.small <- cp %>% select(country, year, poco, eu, gov_right1, gov_cent1, gov_left1, log_pop)
cp %>% group_by(poco) %>% tally
## # A tibble: 2 x 2
##    poco     n
##   <int> <int>
## 1     0  1371
## 2     1   279
n_distinct для подсчёта уникальных значений в столбце.cp %>% group_by(poco) %>% summarise(n = n_distinct(country))
## # A tibble: 2 x 2
##    poco     n
##   <int> <int>
## 1     0    25
## 2     1    11