url_world_data <- "http://crow.academy.ru/~ikocherg/stud_do/2015vesna/world.txt.zip"
file.exists("data/world.txt.zip") || download.file(url_world_data,destfile = "data/world.txt.zip")
## [1] TRUE
unzip("data/world.txt.zip",exdir = "data")
city <- read.csv2("data/city.txt",as.is=T)
country <- read.csv2("data/country.txt",as.is=T)
Шпаргалка по пакету находится в разделе шпаргалок RStudio под именем Data Wrangling Cheat Sheet
library(dplyr)
Преобразуем фреймы данных в усовершенствованные (local data frame), которые поддерживает пакет dplyr.
city_t <- tbl_df(city)
country_t <- tbl_df(country)
База world
city_t
## Source: local data frame [4,079 x 5]
##
## CityID Name CountryCode District Population
## (int) (chr) (chr) (chr) (int)
## 1 1 Kabul AFG Kabol 1780000
## 2 2 Qandahar AFG Qandahar 237500
## 3 3 Herat AFG Herat 186800
## 4 4 Mazar-e-Sharif AFG Balkh 127800
## 5 5 Amsterdam NLD Noord-Holland 731200
## 6 6 Rotterdam NLD Zuid-Holland 593321
## 7 7 Haag NLD Zuid-Holland 440900
## 8 8 Utrecht NLD Utrecht 234323
## 9 9 Eindhoven NLD Noord-Brabant 201843
## 10 10 Tilburg NLD Noord-Brabant 193238
## .. ... ... ... ... ...
country_t
## Source: local data frame [239 x 15]
##
## CountryCode Name Continent
## (chr) (chr) (chr)
## 1 ABW Aruba North America
## 2 AFG Afghanistan Asia
## 3 AGO Angola Africa
## 4 AIA Anguilla North America
## 5 ALB Albania Europe
## 6 AND Andorra Europe
## 7 ANT Netherlands Antilles North America
## 8 ARE United Arab Emirates Asia
## 9 ARG Argentina South America
## 10 ARM Armenia Asia
## .. ... ... ...
## Variables not shown: Region (chr), SurfaceArea (dbl), IndepYear (int),
## Population (int), LifeExpectancy (dbl), GNP (dbl), GNPOld (dbl),
## LocalName (chr), GovernmentForm (chr), HeadOfState (chr), Capital (int),
## Code2 (chr)
Задание 1 Выдайте названия территорий и стран мира, в которых нет крупных городов (нет соответствующих строк в таблице city_t) Запрос должен выдать такой результат:
## Source: local data frame [7 x 2]
##
## Name Continent
## (chr) (chr)
## 1 British Indian Ocean Territory Africa
## 2 South Georgia and the South Sandwich Islands Antarctica
## 3 Heard Island and McDonald Islands Antarctica
## 4 Bouvet Island Antarctica
## 5 French Southern territories Antarctica
## 6 Antarctica Antarctica
## 7 United States Minor Outlying Islands Oceania
Задание 2 Выдать названия регионов Европы, где есть города с населением более 7 миллионов и укажите количество таких городов. Ожидаемый вывод:
## Source: local data frame [2 x 2]
##
## Region count
## (chr) (int)
## 1 British Islands 1
## 2 Eastern Europe 1
Задание 3 Выдайте те же регионы, что и в запросе из предыдущей задачи, но выдайте только названия этих регионов, не выдавая количества городов. Сделайте это при помощи функции semi_join()
## Source: local data frame [2 x 1]
##
## Region
## (chr)
## 1 British Islands
## 2 Eastern Europe
Задание 4 Узнайте, у каких стран и территорий не указан год независимости. Выдайте только территории, c названиями начинающиеся с латинской буквы “A” и с населением более тысячи. Столбцы: Name, Continent, Population. Подсказки: в функции grepl шаблон (pattern) строится по правилам регулярных выражений. Есть целый сайт про них. Если шаблон начинается с “^”“, то он сопоставляется (match) только с началом строки. А символ”$" означает в шаблоне конец строки. Функции grep() и grepl() поддерживают следующие типы регулярных выражений:
Функция is.na() позволяет находить пустые значения (NA).
Ожидаемый результат:
## Source: local data frame [3 x 3]
##
## Name Continent Population
## (chr) (chr) (int)
## 1 Aruba North America 103000
## 2 Anguilla North America 8000
## 3 American Samoa Oceania 68000
Задание 5 Выдайте 5 регионов мира с наименьшим количеством столиц. Для того, чтобы не выводились регионы совсем без столиц примените inner_join().
Ожидаемый результат:
## Source: local data frame [5 x 2]
##
## Region kolvo_stolic
## (chr) (int)
## 1 British Islands 2
## 2 Baltic Countries 3
## 3 Australia and New Zealand 5
## 4 Melanesia 5
## 5 North America 5
Задание 6 (модификация предыдущей задачи)
Выдайте 5 регионов мира с наименьшим количеством столиц. Для того, чтобы выводились регионы с нулевым количеством столиц примените другой тип join. Подсказка: “Хакерская” замена sql-ной функции count: sum(логическое выражение) – будет интерпретировать TRUE как 1, а FALSE как 0, то есть подсчитает, сколько раз было выполнено условие. Вы можете подсчитать сколько с регионом связано столиц, исключая из подсчета те строки, которые получились в результате outer join и содержат пустые значения (NA) в тех полях, где в нормальных условиях NA не могут появиться.
Ожидаемый результат:
## Source: local data frame [5 x 2]
##
## Region kolvo_stolic
## (chr) (int)
## 1 Antarctica 0
## 2 Micronesia/Caribbean 0
## 3 British Islands 2
## 4 Baltic Countries 3
## 5 Australia and New Zealand 5