Carga de datos

Cargamos la base de datos. Los datos se obtuvieron de Banco Mundial y se agruparon diversas bases.
El dataset puede descargarse desde aqui.
También puede cargarse desde una query a data.world:
bancomundial <- read.csv(“https://query.data.world/s/owzasudqx4g5a3lqt32ykoudalq3ul”, header=TRUE, stringsAsFactors=TRUE)

bancomundial <- read.csv("data-wb/dataset_bancomundial.csv", 
                               stringsAsFactors = TRUE) 

Podemos ver que en el global environment se creo nuestro objeto bancomundial.

 

Funciones de R Base

La función dim() nos permite ver la dimensión de nuestro dataset.

dim(bancomundial)
## [1] 13237     9

Nuestro dataset tiene 13237 filas y 9 columnas.

 

Se pueden utilizar también las funciones nrow() y ncol() para conocer la cantidad de filas y de columnas respectivamente.

nrow(bancomundial)
## [1] 13237
ncol(bancomundial)
## [1] 9

Ahora que conocemos las dimensiones, queremos ver los nombres de esas nueve columnas o variables.

names(bancomundial)
## [1] "Country.Name"        "Country.Code"        "Region"             
## [4] "IncomeGroup"         "year"                "pop_total"          
## [7] "perc_urban_pop"      "pop_in_largest_city" "GDP_in_USD"

Todavía no sabemos que contienen las variables. Para averiguarlo, podemos usar la función head() que muestra por default las primeras 6 observaciones.

head(bancomundial)
##     Country.Name Country.Code              Region         IncomeGroup year
## 1 American Samoa          ASM East Asia & Pacific Upper middle income 1960
## 2 American Samoa          ASM East Asia & Pacific Upper middle income 1961
## 3 American Samoa          ASM East Asia & Pacific Upper middle income 1962
## 4 American Samoa          ASM East Asia & Pacific Upper middle income 1963
## 5 American Samoa          ASM East Asia & Pacific Upper middle income 1964
## 6 American Samoa          ASM East Asia & Pacific Upper middle income 1965
##   pop_total perc_urban_pop pop_in_largest_city GDP_in_USD
## 1     20123         66.211                  NA         NA
## 2     20602         66.641                  NA         NA
## 3     21253         67.068                  NA         NA
## 4     22034         67.493                  NA         NA
## 5     22854         67.916                  NA         NA
## 6     23672         68.334                  NA         NA

Podemos configurar la cantidad de observaciones. Por ejemplo, si quisieramos ver 10 filas, deberíamos agregar ese parámetro en la función:

head(bancomundial, 10)
##      Country.Name Country.Code              Region         IncomeGroup year
## 1  American Samoa          ASM East Asia & Pacific Upper middle income 1960
## 2  American Samoa          ASM East Asia & Pacific Upper middle income 1961
## 3  American Samoa          ASM East Asia & Pacific Upper middle income 1962
## 4  American Samoa          ASM East Asia & Pacific Upper middle income 1963
## 5  American Samoa          ASM East Asia & Pacific Upper middle income 1964
## 6  American Samoa          ASM East Asia & Pacific Upper middle income 1965
## 7  American Samoa          ASM East Asia & Pacific Upper middle income 1966
## 8  American Samoa          ASM East Asia & Pacific Upper middle income 1967
## 9  American Samoa          ASM East Asia & Pacific Upper middle income 1968
## 10 American Samoa          ASM East Asia & Pacific Upper middle income 1969
##    pop_total perc_urban_pop pop_in_largest_city GDP_in_USD
## 1      20123         66.211                  NA         NA
## 2      20602         66.641                  NA         NA
## 3      21253         67.068                  NA         NA
## 4      22034         67.493                  NA         NA
## 5      22854         67.916                  NA         NA
## 6      23672         68.334                  NA         NA
## 7      24462         68.750                  NA         NA
## 8      25248         69.163                  NA         NA
## 9      25989         69.574                  NA         NA
## 10     26703         69.980                  NA         NA

La función summary() nos permite ver un resumen de la información contenida en nuestro dataset.

summary(bancomundial)
##          Country.Name    Country.Code                          Region    
##  Afghanistan   :   61   ABW    :   61   East Asia & Pacific       :2257  
##  Albania       :   61   AFG    :   61   Europe & Central Asia     :3538  
##  Algeria       :   61   AGO    :   61   Latin America & Caribbean :2562  
##  American Samoa:   61   ALB    :   61   Middle East & North Africa:1281  
##  Andorra       :   61   AND    :   61   North America             : 183  
##  Angola        :   61   ARE    :   61   South Asia                : 488  
##  (Other)       :12871   (Other):12871   Sub-Saharan Africa        :2928  
##               IncomeGroup        year        pop_total        
##  High income        :5002   Min.   :1960   Min.   :3.893e+03  
##  Low income         :1769   1st Qu.:1975   1st Qu.:4.686e+05  
##  Lower middle income:3050   Median :1990   Median :4.133e+06  
##  Upper middle income:3416   Mean   :1990   Mean   :2.434e+07  
##                             3rd Qu.:2005   3rd Qu.:1.323e+07  
##                             Max.   :2020   Max.   :1.398e+09  
##                                            NA's   :326        
##  perc_urban_pop    pop_in_largest_city   GDP_in_USD       
##  Min.   :  2.077   Min.   :    5254    Min.   :8.824e+06  
##  1st Qu.: 30.185   1st Qu.:  519169    1st Qu.:1.410e+09  
##  Median : 50.258   Median : 1136880    Median :7.481e+09  
##  Mean   : 51.131   Mean   : 2618042    Mean   :1.740e+11  
##  3rd Qu.: 71.755   3rd Qu.: 2658965    3rd Qu.:4.975e+10  
##  Max.   :100.000   Max.   :37468302    Max.   :2.143e+13  
##  NA's   :345       NA's   :4125        NA's   :3352

¿Qué vemos?
Hay 61 observaciones por país, cada una de ellas corresponde a un año. Los años van desde 1960 a 2020. El país con menos habitantes de la muestra tuvo 3.893hab, y el país más habitado contó con 1.397.715.000hab. El porcentaje de población urbana promedio es 50.258%, mientras existe algún país con 100% de población urbana.
 

Algunos resultados están escritos en notación científica. Podemos configurar el archivo para que se toleren números muy grandes.

options(scipen = 99)

Volvemos a ejecutar la función summary() para ver como se modificaron los valores.

summary(bancomundial)
##          Country.Name    Country.Code                          Region    
##  Afghanistan   :   61   ABW    :   61   East Asia & Pacific       :2257  
##  Albania       :   61   AFG    :   61   Europe & Central Asia     :3538  
##  Algeria       :   61   AGO    :   61   Latin America & Caribbean :2562  
##  American Samoa:   61   ALB    :   61   Middle East & North Africa:1281  
##  Andorra       :   61   AND    :   61   North America             : 183  
##  Angola        :   61   ARE    :   61   South Asia                : 488  
##  (Other)       :12871   (Other):12871   Sub-Saharan Africa        :2928  
##               IncomeGroup        year        pop_total         
##  High income        :5002   Min.   :1960   Min.   :      3893  
##  Low income         :1769   1st Qu.:1975   1st Qu.:    468584  
##  Lower middle income:3050   Median :1990   Median :   4133322  
##  Upper middle income:3416   Mean   :1990   Mean   :  24335531  
##                             3rd Qu.:2005   3rd Qu.:  13226839  
##                             Max.   :2020   Max.   :1397715000  
##                                            NA's   :326         
##  perc_urban_pop    pop_in_largest_city   GDP_in_USD            
##  Min.   :  2.077   Min.   :    5254    Min.   :       8824448  
##  1st Qu.: 30.185   1st Qu.:  519169    1st Qu.:    1409873950  
##  Median : 50.258   Median : 1136880    Median :    7480968858  
##  Mean   : 51.131   Mean   : 2618042    Mean   :  173953217878  
##  3rd Qu.: 71.755   3rd Qu.: 2658965    3rd Qu.:   49745088112  
##  Max.   :100.000   Max.   :37468302    Max.   :21433226000000  
##  NA's   :345       NA's   :4125        NA's   :3352

Por último, podemos utilizar la función str() para ver como es la estructura de nuestro dataset:

str(bancomundial)
## 'data.frame':    13237 obs. of  9 variables:
##  $ Country.Name       : Factor w/ 217 levels "Afghanistan",..: 4 4 4 4 4 4 4 4 4 4 ...
##  $ Country.Code       : Factor w/ 217 levels "ABW","AFG","AGO",..: 9 9 9 9 9 9 9 9 9 9 ...
##  $ Region             : Factor w/ 7 levels "East Asia & Pacific",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ IncomeGroup        : Factor w/ 4 levels "High income",..: 4 4 4 4 4 4 4 4 4 4 ...
##  $ year               : int  1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 ...
##  $ pop_total          : num  20123 20602 21253 22034 22854 ...
##  $ perc_urban_pop     : num  66.2 66.6 67.1 67.5 67.9 ...
##  $ pop_in_largest_city: int  NA NA NA NA NA NA NA NA NA NA ...
##  $ GDP_in_USD         : num  NA NA NA NA NA NA NA NA NA NA ...

Las variables ‘Country.Name’, ‘Country.Code’, ‘Region’ e ‘IncomeGroup’ son variables de tipo factor o categórica.
Las variables ‘year’ y ‘pop_total’ son variables tipo integer, o números enteros.
Las variables ‘pop_total’, ‘perc_urban_pop’ y ‘GDP_in_USD’ son variables tipo number o númericas (generalmente con decimales)

 
 

Funciones de Tidyverse

Las funciones que utilizamos son de R base, es decir que vienen con el programa. Sin embargo existen muchas otras funciones disponibles para R. Estas se encuentran en paquetes. El paquete o librería tidyverse nos van a permitir manipular los datos y transformarlos.
Para utilizar un paquete, se instala 1 vez por computadora y se activa cada vez que lo queremos usar. La instalación se realiza con:
 
install.packages("tidyverse") o desde Tools > Install Packages > Tidyverse.

## install.packages("tidyverse")

Una vez instalado el paquete, es necesario activarlo con la funcíon library().

library(tidyverse)
## ── Attaching packages ─────────────────────────────────────────────────────────────────────── tidyverse 1.3.0 ──
## ✓ ggplot2 3.3.2     ✓ purrr   0.3.4
## ✓ tibble  3.0.3     ✓ dplyr   1.0.1
## ✓ tidyr   1.1.1     ✓ stringr 1.4.0
## ✓ readr   1.3.1     ✓ forcats 0.5.0
## ── Conflicts ────────────────────────────────────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()

Muchas veces aparecen advertencias. No se preocupen, no son errores.

 
Ahora que ya tenemos la librería activada, vamos a utilizar algunas de las funciones. Las funciones que veremos a continuación son:
- filter() para filtrar registros en función de alguna característica
- select() para seleccionar columnas a fin de reducir el tamaño del dataset
- mutate() para mutar o modificar registros, o para generar nuevas variables
- rename() para modificar el nombre de nuestras variables (o columnas)
- arrange() para ordenar las filas en función de alguna variable
- group_by() + summarise() para agrupar y resumir el dataset
 

Filtrar

  Podemos utilizar la función filter() para filtrar observaciones:
Por ejemplo, queremos obtener solo las observaciones de Argentina.

datos_argentina <- filter(bancomundial, Country.Name == "Argentina")

Vemos que en nuestro environment tenemos un nuevo objeto que se llama ‘datos_argentina’. Como vimos antes, podemos utilizar la función head() para ver que contiene.

head(datos_argentina)
##   Country.Name Country.Code                    Region         IncomeGroup year
## 1    Argentina          ARG Latin America & Caribbean Upper middle income 1960
## 2    Argentina          ARG Latin America & Caribbean Upper middle income 1961
## 3    Argentina          ARG Latin America & Caribbean Upper middle income 1962
## 4    Argentina          ARG Latin America & Caribbean Upper middle income 1963
## 5    Argentina          ARG Latin America & Caribbean Upper middle income 1964
## 6    Argentina          ARG Latin America & Caribbean Upper middle income 1965
##   pop_total perc_urban_pop pop_in_largest_city  GDP_in_USD
## 1  20481779         73.611             6761837          NA
## 2  20817266         74.217             6919245          NA
## 3  21153052         74.767             7071464 24450604878
## 4  21488912         75.309             7227032 18272123664
## 5  21824425         75.844             7386244 25605249382
## 6  22159650         76.369             7548511 28344705967

También podemos filtrar otros tipos de condiciones. Por ejemplo, queremos que nuestro dataset comience en año 1990.

datos_argentina <- filter(datos_argentina, year >= 1990)
head(datos_argentina)
##   Country.Name Country.Code                    Region         IncomeGroup year
## 1    Argentina          ARG Latin America & Caribbean Upper middle income 1990
## 2    Argentina          ARG Latin America & Caribbean Upper middle income 1991
## 3    Argentina          ARG Latin America & Caribbean Upper middle income 1992
## 4    Argentina          ARG Latin America & Caribbean Upper middle income 1993
## 5    Argentina          ARG Latin America & Caribbean Upper middle income 1994
## 6    Argentina          ARG Latin America & Caribbean Upper middle income 1995
##   pop_total perc_urban_pop pop_in_largest_city   GDP_in_USD
## 1  32618651         86.984            11147566 141352368715
## 2  33079000         87.328            11276696 189719984268
## 3  33529326         87.542            11407033 228788617202
## 4  33970111         87.752            11538512 236741715015
## 5  34402672         87.960            11671691 257440000000
## 6  34828170         88.164            11806407 258031750000

Podríamos haber puesto las dos condiciones en una misma línea de código

datos_argentina <- filter(bancomundial, Country.Name == "Argentina" & year >= 1990)
head(datos_argentina)
##   Country.Name Country.Code                    Region         IncomeGroup year
## 1    Argentina          ARG Latin America & Caribbean Upper middle income 1990
## 2    Argentina          ARG Latin America & Caribbean Upper middle income 1991
## 3    Argentina          ARG Latin America & Caribbean Upper middle income 1992
## 4    Argentina          ARG Latin America & Caribbean Upper middle income 1993
## 5    Argentina          ARG Latin America & Caribbean Upper middle income 1994
## 6    Argentina          ARG Latin America & Caribbean Upper middle income 1995
##   pop_total perc_urban_pop pop_in_largest_city   GDP_in_USD
## 1  32618651         86.984            11147566 141352368715
## 2  33079000         87.328            11276696 189719984268
## 3  33529326         87.542            11407033 228788617202
## 4  33970111         87.752            11538512 236741715015
## 5  34402672         87.960            11671691 257440000000
## 6  34828170         88.164            11806407 258031750000

La función select() nos permite seleccionar las columnas (variables).
Por ejemplo, en nuestro nuevo dataset ‘datos_argentina’ solo queremos ver el año, la población total y el porcentaje de población urbana.

datos_argentina_seleccion <- select(datos_argentina, year, pop_total, perc_urban_pop)
head(datos_argentina_seleccion)
##   year pop_total perc_urban_pop
## 1 1990  32618651         86.984
## 2 1991  33079000         87.328
## 3 1992  33529326         87.542
## 4 1993  33970111         87.752
## 5 1994  34402672         87.960
## 6 1995  34828170         88.164

También se puede seleccionar las columnas que no queremos guardar

datos_argentina_seleccion2 <- select(datos_argentina, -Country.Name, - Country.Code, - Region)
head(datos_argentina_seleccion2)
##           IncomeGroup year pop_total perc_urban_pop pop_in_largest_city
## 1 Upper middle income 1990  32618651         86.984            11147566
## 2 Upper middle income 1991  33079000         87.328            11276696
## 3 Upper middle income 1992  33529326         87.542            11407033
## 4 Upper middle income 1993  33970111         87.752            11538512
## 5 Upper middle income 1994  34402672         87.960            11671691
## 6 Upper middle income 1995  34828170         88.164            11806407
##     GDP_in_USD
## 1 141352368715
## 2 189719984268
## 3 228788617202
## 4 236741715015
## 5 257440000000
## 6 258031750000

Como sacamos las 3 primeras columnas, también podríamos escribirlo como intervalo.

datos_argentina_seleccion3 <- select(datos_argentina, 4:9)
head(datos_argentina_seleccion3)
##           IncomeGroup year pop_total perc_urban_pop pop_in_largest_city
## 1 Upper middle income 1990  32618651         86.984            11147566
## 2 Upper middle income 1991  33079000         87.328            11276696
## 3 Upper middle income 1992  33529326         87.542            11407033
## 4 Upper middle income 1993  33970111         87.752            11538512
## 5 Upper middle income 1994  34402672         87.960            11671691
## 6 Upper middle income 1995  34828170         88.164            11806407
##     GDP_in_USD
## 1 141352368715
## 2 189719984268
## 3 228788617202
## 4 236741715015
## 5 257440000000
## 6 258031750000

La función mutate() permite modificar o generar nuevas variables.

datos_argentina_modificado <- mutate(datos_argentina, pop_millones = pop_total /1000000)
head(datos_argentina_modificado)
##   Country.Name Country.Code                    Region         IncomeGroup year
## 1    Argentina          ARG Latin America & Caribbean Upper middle income 1990
## 2    Argentina          ARG Latin America & Caribbean Upper middle income 1991
## 3    Argentina          ARG Latin America & Caribbean Upper middle income 1992
## 4    Argentina          ARG Latin America & Caribbean Upper middle income 1993
## 5    Argentina          ARG Latin America & Caribbean Upper middle income 1994
## 6    Argentina          ARG Latin America & Caribbean Upper middle income 1995
##   pop_total perc_urban_pop pop_in_largest_city   GDP_in_USD pop_millones
## 1  32618651         86.984            11147566 141352368715     32.61865
## 2  33079000         87.328            11276696 189719984268     33.07900
## 3  33529326         87.542            11407033 228788617202     33.52933
## 4  33970111         87.752            11538512 236741715015     33.97011
## 5  34402672         87.960            11671691 257440000000     34.40267
## 6  34828170         88.164            11806407 258031750000     34.82817

También se puede realizar operaciones entre variables.

datos_argentina_modificado <- mutate(datos_argentina_modificado, 
                                     urban_pop = pop_total * perc_urban_pop / 100)
head(datos_argentina_modificado)
##   Country.Name Country.Code                    Region         IncomeGroup year
## 1    Argentina          ARG Latin America & Caribbean Upper middle income 1990
## 2    Argentina          ARG Latin America & Caribbean Upper middle income 1991
## 3    Argentina          ARG Latin America & Caribbean Upper middle income 1992
## 4    Argentina          ARG Latin America & Caribbean Upper middle income 1993
## 5    Argentina          ARG Latin America & Caribbean Upper middle income 1994
## 6    Argentina          ARG Latin America & Caribbean Upper middle income 1995
##   pop_total perc_urban_pop pop_in_largest_city   GDP_in_USD pop_millones
## 1  32618651         86.984            11147566 141352368715     32.61865
## 2  33079000         87.328            11276696 189719984268     33.07900
## 3  33529326         87.542            11407033 228788617202     33.52933
## 4  33970111         87.752            11538512 236741715015     33.97011
## 5  34402672         87.960            11671691 257440000000     34.40267
## 6  34828170         88.164            11806407 258031750000     34.82817
##   urban_pop
## 1  28373007
## 2  28887229
## 3  29352243
## 4  29809452
## 5  30260590
## 6  30705908

Podemos también agregar texto para todas las variables.

datos_argentina_modificado <- mutate(datos_argentina_modificado, 
                                     fuente = "Banco Mundial")
head(datos_argentina_modificado)
##   Country.Name Country.Code                    Region         IncomeGroup year
## 1    Argentina          ARG Latin America & Caribbean Upper middle income 1990
## 2    Argentina          ARG Latin America & Caribbean Upper middle income 1991
## 3    Argentina          ARG Latin America & Caribbean Upper middle income 1992
## 4    Argentina          ARG Latin America & Caribbean Upper middle income 1993
## 5    Argentina          ARG Latin America & Caribbean Upper middle income 1994
## 6    Argentina          ARG Latin America & Caribbean Upper middle income 1995
##   pop_total perc_urban_pop pop_in_largest_city   GDP_in_USD pop_millones
## 1  32618651         86.984            11147566 141352368715     32.61865
## 2  33079000         87.328            11276696 189719984268     33.07900
## 3  33529326         87.542            11407033 228788617202     33.52933
## 4  33970111         87.752            11538512 236741715015     33.97011
## 5  34402672         87.960            11671691 257440000000     34.40267
## 6  34828170         88.164            11806407 258031750000     34.82817
##   urban_pop        fuente
## 1  28373007 Banco Mundial
## 2  28887229 Banco Mundial
## 3  29352243 Banco Mundial
## 4  29809452 Banco Mundial
## 5  30260590 Banco Mundial
## 6  30705908 Banco Mundial

Podríamos hacer las tres modificaciones en una misma línea de código.

datos_argentina_modificado2 <- mutate(datos_argentina, 
                                      pop_millones = pop_total /1000000, 
                                      urban_pop = pop_total * perc_urban_pop / 100, 
                                      fuente = "Banco Mundial")
head(datos_argentina_modificado2)
##   Country.Name Country.Code                    Region         IncomeGroup year
## 1    Argentina          ARG Latin America & Caribbean Upper middle income 1990
## 2    Argentina          ARG Latin America & Caribbean Upper middle income 1991
## 3    Argentina          ARG Latin America & Caribbean Upper middle income 1992
## 4    Argentina          ARG Latin America & Caribbean Upper middle income 1993
## 5    Argentina          ARG Latin America & Caribbean Upper middle income 1994
## 6    Argentina          ARG Latin America & Caribbean Upper middle income 1995
##   pop_total perc_urban_pop pop_in_largest_city   GDP_in_USD pop_millones
## 1  32618651         86.984            11147566 141352368715     32.61865
## 2  33079000         87.328            11276696 189719984268     33.07900
## 3  33529326         87.542            11407033 228788617202     33.52933
## 4  33970111         87.752            11538512 236741715015     33.97011
## 5  34402672         87.960            11671691 257440000000     34.40267
## 6  34828170         88.164            11806407 258031750000     34.82817
##   urban_pop        fuente
## 1  28373007 Banco Mundial
## 2  28887229 Banco Mundial
## 3  29352243 Banco Mundial
## 4  29809452 Banco Mundial
## 5  30260590 Banco Mundial
## 6  30705908 Banco Mundial

La función rename() permite cambiar los nombres de las columnas.

datos_argentina_renombrado <- rename(datos_argentina, 
                                     Pais = Country.Name, 
                                     Codigo = Country.Code, 
                                     Grupo = IncomeGroup)
head(datos_argentina_renombrado)
##        Pais Codigo                    Region               Grupo year pop_total
## 1 Argentina    ARG Latin America & Caribbean Upper middle income 1990  32618651
## 2 Argentina    ARG Latin America & Caribbean Upper middle income 1991  33079000
## 3 Argentina    ARG Latin America & Caribbean Upper middle income 1992  33529326
## 4 Argentina    ARG Latin America & Caribbean Upper middle income 1993  33970111
## 5 Argentina    ARG Latin America & Caribbean Upper middle income 1994  34402672
## 6 Argentina    ARG Latin America & Caribbean Upper middle income 1995  34828170
##   perc_urban_pop pop_in_largest_city   GDP_in_USD
## 1         86.984            11147566 141352368715
## 2         87.328            11276696 189719984268
## 3         87.542            11407033 228788617202
## 4         87.752            11538512 236741715015
## 5         87.960            11671691 257440000000
## 6         88.164            11806407 258031750000

La función arrange() nos permite reordenar el dataset según un valor en particular.

datos_argentina_ordenado <- arrange(datos_argentina, perc_urban_pop)
head(datos_argentina_ordenado)
##   Country.Name Country.Code                    Region         IncomeGroup year
## 1    Argentina          ARG Latin America & Caribbean Upper middle income 1990
## 2    Argentina          ARG Latin America & Caribbean Upper middle income 1991
## 3    Argentina          ARG Latin America & Caribbean Upper middle income 1992
## 4    Argentina          ARG Latin America & Caribbean Upper middle income 1993
## 5    Argentina          ARG Latin America & Caribbean Upper middle income 1994
## 6    Argentina          ARG Latin America & Caribbean Upper middle income 1995
##   pop_total perc_urban_pop pop_in_largest_city   GDP_in_USD
## 1  32618651         86.984            11147566 141352368715
## 2  33079000         87.328            11276696 189719984268
## 3  33529326         87.542            11407033 228788617202
## 4  33970111         87.752            11538512 236741715015
## 5  34402672         87.960            11671691 257440000000
## 6  34828170         88.164            11806407 258031750000

También lo podríamos ordenar de forma descendiente.

datos_argentina_ordenado2 <- arrange(datos_argentina, desc(perc_urban_pop))
head(datos_argentina_ordenado2)
##   Country.Name Country.Code                    Region         IncomeGroup year
## 1    Argentina          ARG Latin America & Caribbean Upper middle income 2019
## 2    Argentina          ARG Latin America & Caribbean Upper middle income 2018
## 3    Argentina          ARG Latin America & Caribbean Upper middle income 2017
## 4    Argentina          ARG Latin America & Caribbean Upper middle income 2016
## 5    Argentina          ARG Latin America & Caribbean Upper middle income 2015
## 6    Argentina          ARG Latin America & Caribbean Upper middle income 2014
##   pop_total perc_urban_pop pop_in_largest_city   GDP_in_USD
## 1  44938712         91.991            15057273 445445177459
## 2  44494502         91.870            14966530 517626700413
## 3  44044811         91.749            14879100 643628665303
## 4  43590368         91.627            14792181 557531376218
## 5  43131966         91.503            14705533 594749285413
## 6  42669500         91.377            14619510 526319673732

Las funciones group_by() y summarise() suelen utilizarse en conjunto.
group_by() genera grupos de observaciones según alguna variable. No genera resultados parciales, solo las agrupa.
summarise() genera resumenes o nuevos resultados a partir de los datos agrupados.

Por ejemplo, nos gustaría obtener el GDP total y la cantidad de observaciones que hay para cada Income Group.
Entonces, en primer lugar, vamos a agrupar por income group

income_agrupado <- group_by(bancomundial, IncomeGroup)
head(income_agrupado)
## # A tibble: 6 x 9
## # Groups:   IncomeGroup [1]
##   Country.Name Country.Code Region IncomeGroup  year pop_total perc_urban_pop
##   <fct>        <fct>        <fct>  <fct>       <int>     <dbl>          <dbl>
## 1 American Sa… ASM          East … Upper midd…  1960     20123           66.2
## 2 American Sa… ASM          East … Upper midd…  1961     20602           66.6
## 3 American Sa… ASM          East … Upper midd…  1962     21253           67.1
## 4 American Sa… ASM          East … Upper midd…  1963     22034           67.5
## 5 American Sa… ASM          East … Upper midd…  1964     22854           67.9
## 6 American Sa… ASM          East … Upper midd…  1965     23672           68.3
## # … with 2 more variables: pop_in_largest_city <int>, GDP_in_USD <dbl>

Vemos que los datos no se modificaron. Lo que hace R es agruparlos sin realizar ninguna operación.
Para eso, necesitamos resumir los datos agrupados.

income_resumen <- summarise(income_agrupado, 
                            cantidad = n(), # la funcion n() realiza conteos
                            GDP_total = sum(GDP_in_USD, na.rm = TRUE)) # na.rm = TRUE evita los valores NA
## `summarise()` ungrouping output (override with `.groups` argument)
head(income_resumen)
## # A tibble: 4 x 3
##   IncomeGroup         cantidad GDP_total
##   <fct>                  <int>     <dbl>
## 1 High income             5002   1.26e15
## 2 Low income              1769   7.69e12
## 3 Lower middle income     3050   9.20e13
## 4 Upper middle income     3416   3.57e14

Si realizaron todas las funciones, van a ver que su global environment está lleno de objetos. Fuimos generando objetos intermedios a los cuales les aplicamos las distintas funciones. Por suerte, podemos concatenar funciones, y así evitarnos los objetos intermedios.
Para concatenar funciones (es decir, realizar una a continuación de la otra) se utiliza el operador pipe %>%. Cuando utilizamos funciones sueltas, el dataset iba dentro de la función. Al utilizar el pipe %>% los datos suelen ir por fuera.
 

A modo de ejemplo, vamos a un ejercicio. Queremos conocer la cantidad de países discriminados por región que se encuentran dentro del grupo de ingresos medio superior (Income Group: Upper middle income) en el año 2000. Además queremos saber el GDP total de esa región, la población total de esa región y el promedio de población por país.
¡Resolvamoslo en un único chunk!

upper_middle_income <- bancomundial %>% #primero se coloca la base de datos
  filter(IncomeGroup == "Upper middle income" & year == 2000) %>% #filtramos los datos 
  group_by(Region) %>%  #agrupamos por region
  summarise(cantidad_paises = n(),
            GDP_total = sum(GDP_in_USD, na.rm = TRUE), 
            pop_total_r = sum(pop_total, na.rm = TRUE), 
            GDP_per_capita = GDP_total/pop_total_r) %>% 
  arrange(desc(GDP_per_capita))
## `summarise()` ungrouping output (override with `.groups` argument)

Veamos los resultados:

head(upper_middle_income)
## # A tibble: 6 x 5
##   Region                    cantidad_paises GDP_total pop_total_r GDP_per_capita
##   <fct>                               <int>     <dbl>       <dbl>          <dbl>
## 1 Latin America & Caribbean              20   2.05e12   458554206          4462.
## 2 Sub-Saharan Africa                      5   1.52e11    50240154          3027.
## 3 South Asia                              1   6.24e 8      279398          2235.
## 4 Europe & Central Asia                  15   6.14e11   281278244          2183.
## 5 Middle East & North Afri…               5   1.74e11   103444152          1678.
## 6 East Asia & Pacific                    10   1.60e12  1561507123          1024.

 

Bonus Track: GGPLOT!

Para hacer gráficos, podemos utilizar ggplot(). GGPLOT es un paquete que se encuentra dentro de la librería Tidyverse.

La lógica de ggplot es sumar capas de objetos a los gráficos. Siempre se escribe primero la función ggplot() y después podemos ir sumando la información.
 

Como ya sabemos manipular la base de datos, buscamos visualizar la distribución de la población en el año 2000.
Para visualizar una distribución, el tipo de gráfico más común es el histograma:

bancomundial %>% #primero la base de datos 
  filter(year == 2000) %>% #filtramos el año
  ggplot() + #realizamos la función ggplot
  geom_histogram(aes(x = pop_total)) #sumamos un tipo de geometría
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Vemos una distribución muy dispar. Hay dos países (posiblemente China e India) que superar el billón de habitantes.

Otra forma de escribir la base de datos es dentro de la función ggplot()

ggplot(bancomundial %>% filter(year == 2000)) + 
  geom_histogram(aes(x = pop_total))
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Obtenemos el mismo gráfico.
 

Para visualizar la cantidad de países por Income Group en el año 2015, podríamos realizar un gráfico de barras.

bancomundial %>% 
  filter(year == 2015) %>% 
  ggplot() + 
  geom_bar(aes(x = IncomeGroup))

Podemos agregar color y modificar los títulos.

bancomundial %>% 
  filter(year == 2015) %>% 
  ggplot() + 
  geom_bar(aes(x = IncomeGroup, fill = IncomeGroup), color = "grey30") + 
  labs(title = "Cantidad de países por Income Group", 
       subtitle = "Año 2015", 
       caption = "Fuente: Banco Mundial", 
       x = "Income Group", 
       y = "Cantidad")

Como el parámetro ‘fill’ depende de una variable (en este caso IncomeGroup), se encuentra DENTRO de la función aes(). El parámetro ‘color’ no depende de ninguna variable, entonces se encuentra fuera.

bancomundial %>% 
  filter(year == 2015) %>% 
  ggplot() + 
  geom_bar(aes(x = IncomeGroup), color = "grey30", fill = "cornflowerblue") + 
  labs(title = "Cantidad de países por Income Group", 
       subtitle = "Año 2015", 
       caption = "Fuente: Banco Mundial", 
       x = "Income Group", 
       y = "Cantidad") + 
  facet_wrap(~Region, ncol = 4) + 
  theme_minimal() + 
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1))