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