Juguemos con la data de Gapminder
- Usamos la función import del paquete
rio
llamamos a la data.
library(rio)
data<-import("https://raw.githubusercontent.com/resbaz/r-novice-gapminder-files/master/data/gapminder-FiveYearData.csv")
Demos un vistazo a la data usando head()
head(data, 10)
## country year pop continent lifeExp gdpPercap
## 1 Afghanistan 1952 8425333 Asia 28.801 779.4453
## 2 Afghanistan 1957 9240934 Asia 30.332 820.8530
## 3 Afghanistan 1962 10267083 Asia 31.997 853.1007
## 4 Afghanistan 1967 11537966 Asia 34.020 836.1971
## 5 Afghanistan 1972 13079460 Asia 36.088 739.9811
## 6 Afghanistan 1977 14880372 Asia 38.438 786.1134
## 7 Afghanistan 1982 12881816 Asia 39.854 978.0114
## 8 Afghanistan 1987 13867957 Asia 40.822 852.3959
## 9 Afghanistan 1992 16317921 Asia 41.674 649.3414
## 10 Afghanistan 1997 22227415 Asia 41.763 635.3414
Empecemos a filtrar.
-
Queremos tener la información solo sobre el continente Americano
- Primero veamos que continentes están incluidos en la data
table(data$continent)
##
## Africa Americas Asia Europe Oceania
## 624 300 396 360 24
Nos quedaremo con “Americas”
-
- Método tradicional. Usando las dimensiones de la data. La data tiene dos dimensiones filas y columnas. Podemos filtrar las “filas”
data1= data[data$continent=="Americas",]
- Es clave entender que los corchetes y las comas me permiten identificar las dimensiones.
[ filas, columnas ]
- En este caso he creado un nuevo objeto filtrando las filas que coinciden con mi criterio.
table(data1$continent)
##
## Americas
## 300
- Ahora usando la función filter de Dplyr.
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
data1<-data%>%filter(continent=="Americas")
table(data1$continent)
##
## Americas
## 300
-
Tener en cuenta: dplyr usa el %>% que es como decir “lo de la izquierda tiralo hacia la derecha”.
-
Mira este gif que lo explica con Mario Bros
¿Cuál es la ventaja de Dplyr?
Que con dplyr puedes armar filtros más complejos en una misma línea sin que el código se complique mucho.
Por ejemplo, si queremos filtrar los países de America, pero que tengan una pbi per capita mayor a 700, y solo necesitamos datos del 2000 hacia adelante el código usando las dimensiones de la data sería muy emarañado/confuso.
data1= data[data$continent=="Americas"&data$gdpPercap>700&data$year>2000,]
head(data1)
## country year pop continent lifeExp gdpPercap
## 59 Argentina 2002 38331121 Americas 74.340 8797.641
## 60 Argentina 2007 40301927 Americas 75.320 12779.380
## 143 Bolivia 2002 8445134 Americas 63.883 3413.263
## 144 Bolivia 2007 9119152 Americas 65.554 3822.137
## 179 Brazil 2002 179914212 Americas 71.006 8131.213
## 180 Brazil 2007 190010647 Americas 72.390 9065.801
Con Dplyr
data1=data%>%filter(continent=="Americas",gdpPercap>700,year>2000)
head(data1)
## country year pop continent lifeExp gdpPercap
## 1 Argentina 2002 38331121 Americas 74.340 8797.641
## 2 Argentina 2007 40301927 Americas 75.320 12779.380
## 3 Bolivia 2002 8445134 Americas 63.883 3413.263
## 4 Bolivia 2007 9119152 Americas 65.554 3822.137
## 5 Brazil 2002 179914212 Americas 71.006 8131.213
## 6 Brazil 2007 190010647 Americas 72.390 9065.801
Además lo interesante de Dplyr es que te permite conectar funciones. Lo que hace el código más eficiente. Por ejemplo, quiero hacer una regresión pero usando los casos filtrados en el paso anterior, con dplyr no necesito crear ningún objeto nuevo.
data%>%filter(continent=="Americas",gdpPercap>700,year>2000)%>%
lm(lifeExp~gdpPercap, data=.)%>%summary()
##
## Call:
## lm(formula = lifeExp ~ gdpPercap, data = .)
##
## Residuals:
## Min 1Q Median 3Q Max
## -12.2846 -1.2025 0.1773 2.4929 5.9131
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 7.005e+01 7.970e-01 87.891 < 2e-16 ***
## gdpPercap 2.922e-04 5.829e-05 5.013 7.71e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 3.778 on 48 degrees of freedom
## Multiple R-squared: 0.3436, Adjusted R-squared: 0.33
## F-statistic: 25.13 on 1 and 48 DF, p-value: 7.714e-06