Импорт данных для заданий

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