Como primera medida se usarán los datos LifecycleSavings que guarda los ahorros personales tomados de los ingresos disponibles en la decada de 1960-1970 de 50 paises.
las variables de estos datos son numéricas y respresentan:
se selecionarán los paises con ahorros personales agregados mayores al promedio con la opción filter.
library(tidyverse)
data("LifeCycleSavings")
media=mean(LifeCycleSavings[,1]) #Promedio de porcentaje de ahorro.
AMP = filter(LifeCycleSavings, sr > media) #ahorros mayores al promedio.
head(AMP)
## sr pop15 pop75 dpi ddpi
## Australia 11.43 29.35 2.87 2329.68 2.87
## Austria 12.07 23.32 4.41 1507.99 3.93
## Belgium 13.17 23.80 4.43 2108.47 3.82
## Brazil 12.88 42.19 0.83 728.47 4.56
## China 11.90 44.75 0.67 289.52 6.51
## Costa Rica 10.78 47.64 1.14 471.24 2.80
Ahora se filtrarán los países con ahorros personales agregados mayores al promedio y con un ingreso mayor a 2500 dolares.
AMP.I2000=filter(LifeCycleSavings, sr > media,dpi> 2400)
head(AMP.I2000)
## sr pop15 pop75 dpi ddpi
## Denmark 16.85 24.42 3.93 2496.53 3.99
## Germany 12.55 23.31 3.35 2457.12 3.44
## Luxembourg 10.35 21.80 3.73 2449.39 1.57
## Switzerland 14.13 23.49 3.73 2630.96 2.70
Se filtrarán los países con ahorros personales agregados mayores al promedio o con un ingreso mayor a 2500 dolares.
AMP.o.I2000=filter(LifeCycleSavings, sr > media|dpi> 2400)
AMP.o.I2000
## sr pop15 pop75 dpi ddpi
## Australia 11.43 29.35 2.87 2329.68 2.87
## Austria 12.07 23.32 4.41 1507.99 3.93
## Belgium 13.17 23.80 4.43 2108.47 3.82
## Brazil 12.88 42.19 0.83 728.47 4.56
## Canada 8.79 31.72 2.85 2982.88 2.43
## China 11.90 44.75 0.67 289.52 6.51
## Costa Rica 10.78 47.64 1.14 471.24 2.80
## Denmark 16.85 24.42 3.93 2496.53 3.99
## Finland 11.24 27.84 2.37 1681.25 4.32
## France 12.64 25.06 4.70 2213.82 4.52
## Germany 12.55 23.31 3.35 2457.12 3.44
## Greece 10.67 25.62 3.10 870.85 6.28
## Ireland 11.34 31.16 4.19 1139.95 2.99
## Italy 14.28 24.52 3.48 1390.00 3.54
## Japan 21.10 27.01 1.91 1257.28 8.21
## Luxembourg 10.35 21.80 3.73 2449.39 1.57
## Malta 15.48 32.54 2.47 601.05 8.12
## Norway 10.25 25.95 3.67 2231.03 3.62
## Netherlands 14.65 24.71 3.25 1740.70 7.66
## New Zealand 10.67 32.61 3.17 1487.52 1.76
## Peru 12.70 44.19 1.28 400.06 0.67
## Philippines 12.78 46.26 1.12 152.01 2.00
## Portugal 12.49 28.96 2.85 579.51 7.48
## South Africa 11.14 31.94 2.28 651.11 2.19
## South Rhodesia 13.30 31.92 1.52 250.96 2.00
## Spain 11.77 27.74 2.87 768.79 4.35
## Sweden 6.86 21.44 4.54 3299.49 3.01
## Switzerland 14.13 23.49 3.73 2630.96 2.70
## United States 7.56 29.81 3.43 4001.89 2.45
## Zambia 18.56 45.25 0.56 138.33 5.14
Se filtrara el país con el ingreso más bajo.
P.I.B=filter(LifeCycleSavings, dpi == min(dpi))
P.I.B
## sr pop15 pop75 dpi ddpi
## India 9 41.31 0.96 88.94 1.54
Como la base de datos elegida “LifeCycleSavings” no contiene valores Na´s se trabajará con la base de datos de la guía “airquality” filtrando una columna diferente a la del ejemplo.
data("airquality")
head(airquality,10) #Antes de filtrar.
## Ozone Solar.R Wind Temp Month Day
## 1 41 190 7.4 67 5 1
## 2 36 118 8.0 72 5 2
## 3 12 149 12.6 74 5 3
## 4 18 313 11.5 62 5 4
## 5 NA NA 14.3 56 5 5
## 6 28 NA 14.9 66 5 6
## 7 23 299 8.6 65 5 7
## 8 19 99 13.8 59 5 8
## 9 8 19 20.1 61 5 9
## 10 NA 194 8.6 69 5 10
Se remueven los valores perdidos de la radiación solar.
no.missing.Solar.R = filter(airquality, !is.na(Solar.R))
head(no.missing.Solar.R,8) #Después de filtrar.
## Ozone Solar.R Wind Temp Month Day
## 1 41 190 7.4 67 5 1
## 2 36 118 8.0 72 5 2
## 3 12 149 12.6 74 5 3
## 4 18 313 11.5 62 5 4
## 5 23 299 8.6 65 5 7
## 6 19 99 13.8 59 5 8
## 7 8 19 20.1 61 5 9
## 8 NA 194 8.6 69 5 10
Otra forma de hacer lo anterior es filtrar por filas.
airqual.no.NA <- filter(airquality[1:10,], complete.cases(airquality[1:10,]))
airqual.no.NA
## Ozone Solar.R Wind Temp Month Day
## 1 41 190 7.4 67 5 1
## 2 36 118 8.0 72 5 2
## 3 12 149 12.6 74 5 3
## 4 18 313 11.5 62 5 4
## 5 23 299 8.6 65 5 7
## 6 19 99 13.8 59 5 8
## 7 8 19 20.1 61 5 9
Con los datos “CO2” se filtrarán solo las plantas Qn1 y Qc2 con ayuda de %in%.
data("CO2") #Antes de filtrar.
CO2
## Plant Type Treatment conc uptake
## 1 Qn1 Quebec nonchilled 95 16.0
## 2 Qn1 Quebec nonchilled 175 30.4
## 3 Qn1 Quebec nonchilled 250 34.8
## 4 Qn1 Quebec nonchilled 350 37.2
## 5 Qn1 Quebec nonchilled 500 35.3
## 6 Qn1 Quebec nonchilled 675 39.2
## 7 Qn1 Quebec nonchilled 1000 39.7
## 8 Qn2 Quebec nonchilled 95 13.6
## 9 Qn2 Quebec nonchilled 175 27.3
## 10 Qn2 Quebec nonchilled 250 37.1
## 11 Qn2 Quebec nonchilled 350 41.8
## 12 Qn2 Quebec nonchilled 500 40.6
## 13 Qn2 Quebec nonchilled 675 41.4
## 14 Qn2 Quebec nonchilled 1000 44.3
## 15 Qn3 Quebec nonchilled 95 16.2
## 16 Qn3 Quebec nonchilled 175 32.4
## 17 Qn3 Quebec nonchilled 250 40.3
## 18 Qn3 Quebec nonchilled 350 42.1
## 19 Qn3 Quebec nonchilled 500 42.9
## 20 Qn3 Quebec nonchilled 675 43.9
## 21 Qn3 Quebec nonchilled 1000 45.5
## 22 Qc1 Quebec chilled 95 14.2
## 23 Qc1 Quebec chilled 175 24.1
## 24 Qc1 Quebec chilled 250 30.3
## 25 Qc1 Quebec chilled 350 34.6
## 26 Qc1 Quebec chilled 500 32.5
## 27 Qc1 Quebec chilled 675 35.4
## 28 Qc1 Quebec chilled 1000 38.7
## 29 Qc2 Quebec chilled 95 9.3
## 30 Qc2 Quebec chilled 175 27.3
## 31 Qc2 Quebec chilled 250 35.0
## 32 Qc2 Quebec chilled 350 38.8
## 33 Qc2 Quebec chilled 500 38.6
## 34 Qc2 Quebec chilled 675 37.5
## 35 Qc2 Quebec chilled 1000 42.4
## 36 Qc3 Quebec chilled 95 15.1
## 37 Qc3 Quebec chilled 175 21.0
## 38 Qc3 Quebec chilled 250 38.1
## 39 Qc3 Quebec chilled 350 34.0
## 40 Qc3 Quebec chilled 500 38.9
## 41 Qc3 Quebec chilled 675 39.6
## 42 Qc3 Quebec chilled 1000 41.4
## 43 Mn1 Mississippi nonchilled 95 10.6
## 44 Mn1 Mississippi nonchilled 175 19.2
## 45 Mn1 Mississippi nonchilled 250 26.2
## 46 Mn1 Mississippi nonchilled 350 30.0
## 47 Mn1 Mississippi nonchilled 500 30.9
## 48 Mn1 Mississippi nonchilled 675 32.4
## 49 Mn1 Mississippi nonchilled 1000 35.5
## 50 Mn2 Mississippi nonchilled 95 12.0
## 51 Mn2 Mississippi nonchilled 175 22.0
## 52 Mn2 Mississippi nonchilled 250 30.6
## 53 Mn2 Mississippi nonchilled 350 31.8
## 54 Mn2 Mississippi nonchilled 500 32.4
## 55 Mn2 Mississippi nonchilled 675 31.1
## 56 Mn2 Mississippi nonchilled 1000 31.5
## 57 Mn3 Mississippi nonchilled 95 11.3
## 58 Mn3 Mississippi nonchilled 175 19.4
## 59 Mn3 Mississippi nonchilled 250 25.8
## 60 Mn3 Mississippi nonchilled 350 27.9
## 61 Mn3 Mississippi nonchilled 500 28.5
## 62 Mn3 Mississippi nonchilled 675 28.1
## 63 Mn3 Mississippi nonchilled 1000 27.8
## 64 Mc1 Mississippi chilled 95 10.5
## 65 Mc1 Mississippi chilled 175 14.9
## 66 Mc1 Mississippi chilled 250 18.1
## 67 Mc1 Mississippi chilled 350 18.9
## 68 Mc1 Mississippi chilled 500 19.5
## 69 Mc1 Mississippi chilled 675 22.2
## 70 Mc1 Mississippi chilled 1000 21.9
## 71 Mc2 Mississippi chilled 95 7.7
## 72 Mc2 Mississippi chilled 175 11.4
## 73 Mc2 Mississippi chilled 250 12.3
## 74 Mc2 Mississippi chilled 350 13.0
## 75 Mc2 Mississippi chilled 500 12.5
## 76 Mc2 Mississippi chilled 675 13.7
## 77 Mc2 Mississippi chilled 1000 14.4
## 78 Mc3 Mississippi chilled 95 10.6
## 79 Mc3 Mississippi chilled 175 18.0
## 80 Mc3 Mississippi chilled 250 17.9
## 81 Mc3 Mississippi chilled 350 17.9
## 82 Mc3 Mississippi chilled 500 17.9
## 83 Mc3 Mississippi chilled 675 18.9
## 84 Mc3 Mississippi chilled 1000 19.9
CO2.two.plants <- filter(CO2,Plant %in% c("Qn1", "Qc2"))
CO2.two.plants
## Plant Type Treatment conc uptake
## 1 Qn1 Quebec nonchilled 95 16.0
## 2 Qn1 Quebec nonchilled 175 30.4
## 3 Qn1 Quebec nonchilled 250 34.8
## 4 Qn1 Quebec nonchilled 350 37.2
## 5 Qn1 Quebec nonchilled 500 35.3
## 6 Qn1 Quebec nonchilled 675 39.2
## 7 Qn1 Quebec nonchilled 1000 39.7
## 8 Qc2 Quebec chilled 95 9.3
## 9 Qc2 Quebec chilled 175 27.3
## 10 Qc2 Quebec chilled 250 35.0
## 11 Qc2 Quebec chilled 350 38.8
## 12 Qc2 Quebec chilled 500 38.6
## 13 Qc2 Quebec chilled 675 37.5
## 14 Qc2 Quebec chilled 1000 42.4
Se filtrará la base de datos tomada inicialmente LifecycleSavings con una proporción de población menor de 15 años mayor al 35% y se mostrarán las tres primeras columnas.
LifeCycle.3.columns <- filter(LifeCycleSavings, pop15 > 35)[,1:3]
head(LifeCycle.3.columns)
## sr pop15 pop75
## Bolivia 5.75 41.89 1.67
## Brazil 12.88 42.19 0.83
## Chile 0.60 39.74 1.34
## China 11.90 44.75 0.67
## Colombia 4.98 46.64 1.06
## Costa Rica 10.78 47.64 1.14
Se usarán los datos airqueality para este ejemplo y se filtrará la cantidad de veces que se midió el aire en cada mes.
table(airquality$Month) #antes de filtrar
##
## 5 6 7 8 9
## 31 30 31 31 30
Month.frec=airquality %>% group_by(Month)%>%filter(n()>30) #màs de 30 veces
table(Month.frec$Month) #después de filtrar
##
## 5 7 8
## 31 31 31
para darle una condición adicional se buscan además que el aire tenga una temperatura mayora 78 fahrenheit.
Month.frec.temp=airquality %>% group_by(Month)%>%filter(n()>30,Temp > 78)
table(Month.frec.temp$Month)
##
## 5 7 8
## 2 29 24
La tabla nos indica que en el mes de mayo se tomaron 2 mediciones, en julio 29 mediciones y en agosto 24 mediciones con una temperatura mayor a 78 fahrenheit.
Se va a encontrar las columnas que empiecen con d, en la base de datos LifeCycleSavings.
names(LifeCycleSavings) #muestra el nombre de las columnas.
## [1] "sr" "pop15" "pop75" "dpi" "ddpi"
Life.display = LifeCycleSavings %>% dplyr::select(starts_with("d"))
head(Life.display)
## dpi ddpi
## Australia 2329.68 2.87
## Austria 1507.99 3.93
## Belgium 2108.47 3.82
## Bolivia 189.13 0.22
## Brazil 728.47 4.56
## Canada 2982.88 2.43
Se utiliza filter_at para hallar el país con mayor ingreso per-cápita y crecimiento porcentual de ingresos.
new.Life <- LifeCycleSavings %>% filter_at(vars(dpi, ddpi),
all_vars(. == max(.)))
new.Life
## [1] sr pop15 pop75 dpi ddpi
## <0 rows> (or 0-length row.names)
En este caso no hay ningún país que tenga las características buscadas.
Se van a ordenar los los datos “presidential” de ggplot2 y se organizará el nombre en orden decreciente.
data("presidential")
arrange(presidential,name)
## # A tibble: 11 x 4
## name start end party
## <chr> <date> <date> <chr>
## 1 Bush 1989-01-20 1993-01-20 Republican
## 2 Bush 2001-01-20 2009-01-20 Republican
## 3 Carter 1977-01-20 1981-01-20 Democratic
## 4 Clinton 1993-01-20 2001-01-20 Democratic
## 5 Eisenhower 1953-01-20 1961-01-20 Republican
## 6 Ford 1974-08-09 1977-01-20 Republican
## 7 Johnson 1963-11-22 1969-01-20 Democratic
## 8 Kennedy 1961-01-20 1963-11-22 Democratic
## 9 Nixon 1969-01-20 1974-08-09 Republican
## 10 Obama 2009-01-20 2017-01-20 Democratic
## 11 Reagan 1981-01-20 1989-01-20 Republican
arrange(presidential,desc(name))
## # A tibble: 11 x 4
## name start end party
## <chr> <date> <date> <chr>
## 1 Reagan 1981-01-20 1989-01-20 Republican
## 2 Obama 2009-01-20 2017-01-20 Democratic
## 3 Nixon 1969-01-20 1974-08-09 Republican
## 4 Kennedy 1961-01-20 1963-11-22 Democratic
## 5 Johnson 1963-11-22 1969-01-20 Democratic
## 6 Ford 1974-08-09 1977-01-20 Republican
## 7 Eisenhower 1953-01-20 1961-01-20 Republican
## 8 Clinton 1993-01-20 2001-01-20 Democratic
## 9 Carter 1977-01-20 1981-01-20 Democratic
## 10 Bush 1989-01-20 1993-01-20 Republican
## 11 Bush 2001-01-20 2009-01-20 Republican
Se usa la función “rename” para cambiar el nombre de las variables.
names(LifeCycleSavings)
## [1] "sr" "pop15" "pop75" "dpi" "ddpi"
renomb.Life=rename(LifeCycleSavings,income=dpi,ahorros=sr)
names(renomb.Life)
## [1] "ahorros" "pop15" "pop75" "income" "ddpi"
Con la función mutate se añadirá una columna de una variable creada, en este caso el log 10 del ingreso.
head(LifeCycleSavings) #las primeras observaciones de LifeCycleSaving
## sr pop15 pop75 dpi ddpi
## Australia 11.43 29.35 2.87 2329.68 2.87
## Austria 12.07 23.32 4.41 1507.99 3.93
## Belgium 13.17 23.80 4.43 2108.47 3.82
## Bolivia 5.75 41.89 1.67 189.13 0.22
## Brazil 12.88 42.19 0.83 728.47 4.56
## Canada 8.79 31.72 2.85 2982.88 2.43
Life.con.log=mutate(LifeCycleSavings,log.sr=log10(sr))
head(Life.con.log)
## sr pop15 pop75 dpi ddpi log.sr
## Australia 11.43 29.35 2.87 2329.68 2.87 1.0580462
## Austria 12.07 23.32 4.41 1507.99 3.93 1.0817073
## Belgium 13.17 23.80 4.43 2108.47 3.82 1.1195858
## Bolivia 5.75 41.89 1.67 189.13 0.22 0.7596678
## Brazil 12.88 42.19 0.83 728.47 4.56 1.1099159
## Canada 8.79 31.72 2.85 2982.88 2.43 0.9439889
Se agregan las variables raiz cuadrada de cada variable de los datos LifeCyckeSavings.
life.con.raiz= mutate_all(LifeCycleSavings[,1:5],funs("square root" = sqrt( . )))
names(life.con.raiz)
## [1] "sr" "pop15" "pop75"
## [4] "dpi" "ddpi" "sr_square root"
## [7] "pop15_square root" "pop75_square root" "dpi_square root"
## [10] "ddpi_square root"
Life.con.rangos= mutate_at(LifeCycleSavings, vars(sr,pop15,pop75),
funs(Rank = min_rank(desc(.))))
head(Life.con.rangos)
## sr pop15 pop75 dpi ddpi sr_Rank pop15_Rank pop75_Rank
## Australia 11.43 29.35 2.87 2329.68 2.87 19 32 18
## Austria 12.07 23.32 4.41 1507.99 3.93 16 46 5
## Belgium 13.17 23.80 4.43 2108.47 3.82 9 44 4
## Bolivia 5.75 41.89 1.67 189.13 0.22 39 18 29
## Brazil 12.88 42.19 0.83 728.47 4.56 10 17 46
## Canada 8.79 31.72 2.85 2982.88 2.43 32 29 20
Se crea una función que divida por diez para los datos LifeCycleSavings, para posteriormente aplicar dicha función a la base de datos solo a los datos numéricos, esta condición la aporta “mutate_if”.
divide.by.10 <- function (a.number) (a.number / 10)
nuevo.df <- LifeCycleSavings %>%
mutate_if(is.numeric, divide.by.10)
head(nuevo.df)
## sr pop15 pop75 dpi ddpi
## Australia 1.143 2.935 0.287 232.968 0.287
## Austria 1.207 2.332 0.441 150.799 0.393
## Belgium 1.317 2.380 0.443 210.847 0.382
## Bolivia 0.575 4.189 0.167 18.913 0.022
## Brazil 1.288 4.219 0.083 72.847 0.456
## Canada 0.879 3.172 0.285 298.288 0.243
Se utilizarán los datos “mpg” para filtrar las variables que no contengan las letras “a” y “o” con la función filter.
data("mpg")
table(mpg$manufacturer)
##
## audi chevrolet dodge ford honda hyundai jeep
## 18 19 37 25 9 14 8
## land rover lincoln mercury nissan pontiac subaru toyota
## 4 3 4 13 5 14 34
## volkswagen
## 27
mpg.no.o.or.a <- filter(mpg, !str_detect(manufacturer,
paste(c("o","a"), collapse = "|")))
table(mpg.no.o.or.a$manufacturer)
##
## jeep mercury
## 8 4
agregaremos un campo al final para ver si un valor en particular de una columna ocurre más de una vez a esto se le llama indicador duplicador.
mpg.con.dup.indica <- mutate(mpg, duplicador.indicador =
duplicated(manufacturer))
mpg.con.dup.indica[1:6,c(1,2,3,4,12)]
## # A tibble: 6 x 5
## manufacturer model displ year duplicador.indicador
## <chr> <chr> <dbl> <int> <lgl>
## 1 audi a4 1.8 1999 FALSE
## 2 audi a4 1.8 1999 TRUE
## 3 audi a4 2 2008 TRUE
## 4 audi a4 2 2008 TRUE
## 5 audi a4 2.8 1999 TRUE
## 6 audi a4 2.8 1999 TRUE
ahora se crea el indicador duplicador de las variables manufacturer y model teniendo como prioridad manufacturer y despues model.
mpg.con.dup.indicador2 <- mutate(mpg,
duplicate.indicator = duplicated(manufacturer, model)) %>%
arrange(manufacturer,model)
mpg.con.dup.indicador2[1:6,c(1,2,3,4,12)]
## # A tibble: 6 x 5
## manufacturer model displ year duplicate.indicator
## <chr> <chr> <dbl> <int> <lgl>
## 1 audi a4 1.8 1999 FALSE
## 2 audi a4 1.8 1999 TRUE
## 3 audi a4 2 2008 TRUE
## 4 audi a4 2 2008 TRUE
## 5 audi a4 2.8 1999 TRUE
## 6 audi a4 2.8 1999 TRUE
En este caso para que el indicador de duplicador de ambas variables dé “Verdad” ambos indicadores duplicadores tanto de manufacturer como model deben arrojar “Verdad”.
Para el dataframe que se viene manejando “LifeCycleSavings” se borrará la variable ddpi con la opción NULL.
head(LifeCycleSavings) #antes del filtro
## sr pop15 pop75 dpi ddpi
## Australia 11.43 29.35 2.87 2329.68 2.87
## Austria 12.07 23.32 4.41 1507.99 3.93
## Belgium 13.17 23.80 4.43 2108.47 3.82
## Bolivia 5.75 41.89 1.67 189.13 0.22
## Brazil 12.88 42.19 0.83 728.47 4.56
## Canada 8.79 31.72 2.85 2982.88 2.43
Life.sin.ddpi <- mutate(LifeCycleSavings, ddpi = NULL)
head(Life.sin.ddpi) #después del filtro
## sr pop15 pop75 dpi
## Australia 11.43 29.35 2.87 2329.68
## Austria 12.07 23.32 4.41 1507.99
## Belgium 13.17 23.80 4.43 2108.47
## Bolivia 5.75 41.89 1.67 189.13
## Brazil 12.88 42.19 0.83 728.47
## Canada 8.79 31.72 2.85 2982.88
De la variable dpi dada en dolares se añadirán dos columnas con los ingresos en pesos y en euros. Forma no recomendada:
head(mutate(LifeCycleSavings, Pesos = dpi*3760.71, Euros = dpi*0.86))
## sr pop15 pop75 dpi ddpi Pesos Euros
## Australia 11.43 29.35 2.87 2329.68 2.87 8761250.9 2003.5248
## Austria 12.07 23.32 4.41 1507.99 3.93 5671113.1 1296.8714
## Belgium 13.17 23.80 4.43 2108.47 3.82 7929344.2 1813.2842
## Bolivia 5.75 41.89 1.67 189.13 0.22 711263.1 162.6518
## Brazil 12.88 42.19 0.83 728.47 4.56 2739564.4 626.4842
## Canada 8.79 31.72 2.85 2982.88 2.43 11217746.6 2565.2768
Forma recomendada:
head(LifeCycleSavings %>% mutate(Pesos = dpi*3760.71) %>%
mutate(Euros = dpi*0.86))
## sr pop15 pop75 dpi ddpi Pesos Euros
## Australia 11.43 29.35 2.87 2329.68 2.87 8761250.9 2003.5248
## Austria 12.07 23.32 4.41 1507.99 3.93 5671113.1 1296.8714
## Belgium 13.17 23.80 4.43 2108.47 3.82 7929344.2 1813.2842
## Bolivia 5.75 41.89 1.67 189.13 0.22 711263.1 162.6518
## Brazil 12.88 42.19 0.83 728.47 4.56 2739564.4 626.4842
## Canada 8.79 31.72 2.85 2982.88 2.43 11217746.6 2565.2768
Para este ejemplo se sumarán las variables del dataframe “LifeCycleSavings”, no porque tenga un significado si no para mostrar la función de “Trasmute”.
head(transmute(LifeCycleSavings, new.variable = sr + pop15 + pop75
+ dpi + ddpi))
## new.variable
## Australia 2376.20
## Austria 1551.72
## Belgium 2153.69
## Bolivia 238.66
## Brazil 788.93
## Canada 3028.67
Definimos la función que duplica un número, para luego aplicarla a el dataframe “LifeCycleSavings”.
double.it= function(x) x*2
LifeCycleSavings %>% mutate(across(where(is.numeric), double.it)) %>%
head()
## sr pop15 pop75 dpi ddpi
## Australia 22.86 58.70 5.74 4659.36 5.74
## Austria 24.14 46.64 8.82 3015.98 7.86
## Belgium 26.34 47.60 8.86 4216.94 7.64
## Bolivia 11.50 83.78 3.34 378.26 0.44
## Brazil 25.76 84.38 1.66 1456.94 9.12
## Canada 17.58 63.44 5.70 5965.76 4.86
Se creará una columna en el dataframe “LifeCycleSavings” que posteriormente sera cambiada con el condicional “case_when”.
con.Colum.Life= mutate(LifeCycleSavings,colum.que.sera.cambiada= sqrt(LifeCycleSavings$dpi))
head((con.Colum.Life))
## sr pop15 pop75 dpi ddpi colum.que.sera.cambiada
## Australia 11.43 29.35 2.87 2329.68 2.87 48.26676
## Austria 12.07 23.32 4.41 1507.99 3.93 38.83285
## Belgium 13.17 23.80 4.43 2108.47 3.82 45.91808
## Bolivia 5.75 41.89 1.67 189.13 0.22 13.75245
## Brazil 12.88 42.19 0.83 728.47 4.56 26.99018
## Canada 8.79 31.72 2.85 2982.88 2.43 54.61575
#se crea una columna raiz de dpi que será cambiada
colum.cambiad.Life = con.Colum.Life %>% mutate(colum.que.sera.cambiada =
case_when(sr > 9.671 ~ 1,sr<= 9.671 ~ 2, TRUE ~ NA_real_))
head(colum.cambiad.Life)
## sr pop15 pop75 dpi ddpi colum.que.sera.cambiada
## Australia 11.43 29.35 2.87 2329.68 2.87 1
## Austria 12.07 23.32 4.41 1507.99 3.93 1
## Belgium 13.17 23.80 4.43 2108.47 3.82 1
## Bolivia 5.75 41.89 1.67 189.13 0.22 2
## Brazil 12.88 42.19 0.83 728.47 4.56 1
## Canada 8.79 31.72 2.85 2982.88 2.43 2
Borrar una columna con “select” del paquete dplyr.
head(LifeCycleSavings)
## sr pop15 pop75 dpi ddpi
## Australia 11.43 29.35 2.87 2329.68 2.87
## Austria 12.07 23.32 4.41 1507.99 3.93
## Belgium 13.17 23.80 4.43 2108.47 3.82
## Bolivia 5.75 41.89 1.67 189.13 0.22
## Brazil 12.88 42.19 0.83 728.47 4.56
## Canada 8.79 31.72 2.85 2982.88 2.43
head(dplyr::select(LifeCycleSavings, -pop75))
## sr pop15 dpi ddpi
## Australia 11.43 29.35 2329.68 2.87
## Austria 12.07 23.32 1507.99 3.93
## Belgium 13.17 23.80 2108.47 3.82
## Bolivia 5.75 41.89 189.13 0.22
## Brazil 12.88 42.19 728.47 4.56
## Canada 8.79 31.72 2982.88 2.43
Se borrarán las columnas en el dataframe “LifeCycleSavings” que empiezan con “p”.
names(LifeCycleSavings)
## [1] "sr" "pop15" "pop75" "dpi" "ddpi"
Life.no.col.names.start.with.p <- select(LifeCycleSavings, -starts_with("p"))
names(Life.no.col.names.start.with.p)
## [1] "sr" "dpi" "ddpi"
Se borrarán las columnas en el dataframe “LifeCycleSavings” que acaban con “i”.
Life.no.col.names.ends.with.i <- select(LifeCycleSavings, -ends_with("i"))
names(Life.no.col.names.ends.with.i)
## [1] "sr" "pop15" "pop75"
La función toupper coloca en mayúscula las variables de LifeCycleSavings.
head(LifeCycleSavings)
## sr pop15 pop75 dpi ddpi
## Australia 11.43 29.35 2.87 2329.68 2.87
## Austria 12.07 23.32 4.41 1507.99 3.93
## Belgium 13.17 23.80 4.43 2108.47 3.82
## Bolivia 5.75 41.89 1.67 189.13 0.22
## Brazil 12.88 42.19 0.83 728.47 4.56
## Canada 8.79 31.72 2.85 2982.88 2.43
nuevo.Life <- select_all(LifeCycleSavings, toupper)
head(nuevo.Life) #Base de datos después de las función toupper.
## SR POP15 POP75 DPI DDPI
## Australia 11.43 29.35 2.87 2329.68 2.87
## Austria 12.07 23.32 4.41 1507.99 3.93
## Belgium 13.17 23.80 4.43 2108.47 3.82
## Bolivia 5.75 41.89 1.67 189.13 0.22
## Brazil 12.88 42.19 0.83 728.47 4.56
## Canada 8.79 31.72 2.85 2982.88 2.43
Para seleccionar las categorías de la primera columna de los datos “mpg” se usa la función pull, además para solo mostrar una vez cada categoría se utiliza la función unique.
data("mpg")
pull.primera.col=unique(pull(mpg,1)) # el número uno representa la primera
#columna
head(pull.primera.col)
## [1] "audi" "chevrolet" "dodge" "ford" "honda" "hyundai"
También se puede seleccionar la columna de izquierda a derecha poniendo en el segundo argumento de la función pull -1.
pull.última.col=unique(pull(mpg,-1)) # el número uno representa la primera
#columna
pull.última.col
## [1] "compact" "midsize" "suv" "2seater" "minivan"
## [6] "pickup" "subcompact"
Se filtrarán los datos de todas las variables de LifeCycleSavings que tengan un valor mayor a 2600.
nrow(LifeCycleSavings)
## [1] 50
Life.mas.de.2600 <- filter_all(LifeCycleSavings, any_vars(. > 2600))
head(Life.mas.de.2600)
## sr pop15 pop75 dpi ddpi
## Canada 8.79 31.72 2.85 2982.88 2.43
## Sweden 6.86 21.44 4.54 3299.49 3.01
## Switzerland 14.13 23.49 3.73 2630.96 2.70
## United States 7.56 29.81 3.43 4001.89 2.45
nrow(Life.mas.de.2600)
## [1] 4
names(LifeCycleSavings)
## [1] "sr" "pop15" "pop75" "dpi" "ddpi"
life.no.r <- LifeCycleSavings %>% select(-contains("r"))
names(life.no.r)
## [1] "pop15" "pop75" "dpi" "ddpi"
Ahora se seleccionan las variables que contengan unas letras en específico.
names(LifeCycleSavings)
## [1] "sr" "pop15" "pop75" "dpi" "ddpi"
subset.Life <- select(LifeCycleSavings, matches("pop|s"))
names(subset.Life)
## [1] "sr" "pop15" "pop75"
Primero se crearán dos dataframes con la columna sr en común, para luego utilizar Left Join y unirlos.
primer.df= select(LifeCycleSavings,sr,pop15)
head(primer.df)
## sr pop15
## Australia 11.43 29.35
## Austria 12.07 23.32
## Belgium 13.17 23.80
## Bolivia 5.75 41.89
## Brazil 12.88 42.19
## Canada 8.79 31.72
segundo.df=select(LifeCycleSavings,sr,pop75)
head(segundo.df)
## sr pop75
## Australia 11.43 2.87
## Austria 12.07 4.41
## Belgium 13.17 4.43
## Bolivia 5.75 1.67
## Brazil 12.88 0.83
## Canada 8.79 2.85
primer.y.segundo= primer.df %>% left_join(segundo.df, by = "sr")
head(primer.y.segundo)
## sr pop15 pop75
## 1 11.43 29.35 2.87
## 2 12.07 23.32 4.41
## 3 13.17 23.80 4.43
## 4 5.75 41.89 1.67
## 5 12.88 42.19 0.83
## 6 8.79 31.72 2.85
Se crean dos tablas de datos, un con los goles por jugador y otra con partidos jugados en club y selección, con la opción inner_join se unirán los nombres que coincidan en las dos tablas.
jugadores=c("Messi", "Mbappé", "Haland", "Lewandowski","Ronaldo" )
goles=c(33,32,31,41,27)
gol.x.jugador=data.frame(jugadores,goles)
jugadores=c("Harry Kane", "Karim Benzema","Messi","Lewandowski","Ronaldo" )
partidos=c(39,36,39,32,40)
jugadores.x.partido=data.frame(jugadores,partidos)
gol.jugador.partido <- inner_join(gol.x.jugador,jugadores.x.partido, by = "jugadores")
gol.jugador.partido
## jugadores goles partidos
## 1 Messi 33 39
## 2 Lewandowski 41 32
## 3 Ronaldo 27 40
Se hará la uniónn de los dos dataframes creados anteriormente pero esta vez la opción anti_join nos muestra los nombres de los jugadores los cuales no se conoce la cantidad de partidos jugados.
no.info.partidos=anti_join(gol.x.jugador,jugadores.x.partido, by = "jugadores")
no.info.partidos
## jugadores goles
## 1 Mbappé 32
## 2 Haland 31
Se presenta la información de los jugadores, toda en una tabla, tenga en cuenta que en los datos faltantes se representan como NA.
Todos.los.jugadores=full_join(gol.x.jugador,jugadores.x.partido, by = "jugadores")
Todos.los.jugadores
## jugadores goles partidos
## 1 Messi 33 39
## 2 Mbappé 32 NA
## 3 Haland 31 NA
## 4 Lewandowski 41 32
## 5 Ronaldo 27 40
## 6 Harry Kane NA 39
## 7 Karim Benzema NA 36
Para esta función el orden importa, si vamos de la tabla de goles a la de partidos jugados apareceran los goles de los jugadores que están en ambas tablas, sin embargo si primero ponemos la tabla de partidos y luego la de goles, apareceran los partidos de los jugadores que están en las dos tablas.
semi.info.jug=semi_join(gol.x.jugador,jugadores.x.partido)
## Joining, by = "jugadores"
semi.info.jug
## jugadores goles
## 1 Messi 33
## 2 Lewandowski 41
## 3 Ronaldo 27
semi.info.jug2=semi_join(jugadores.x.partido,gol.x.jugador)
## Joining, by = "jugadores"
semi.info.jug2
## jugadores partidos
## 1 Messi 39
## 2 Lewandowski 32
## 3 Ronaldo 40
La tabla de partidos jugados se anexa a la tabla de goles por jugador, Harry Kane y Karim Benzema no tienen informacion en la tabla de goles por este motivo aparece el NA.
Right.join.jugad<- right_join(gol.x.jugador,jugadores.x.partido, by = "jugadores")
Right.join.jugad
## jugadores goles partidos
## 1 Messi 33 39
## 2 Lewandowski 41 32
## 3 Ronaldo 27 40
## 4 Harry Kane NA 39
## 5 Karim Benzema NA 36
La función slice permite elegir las filas que queramos, se van a tomar las primeras 5 filas de la tabla de datos.
Life.solo.5filas=slice(LifeCycleSavings,-6:-n())
Life.solo.5filas
## sr pop15 pop75 dpi ddpi
## Australia 11.43 29.35 2.87 2329.68 2.87
## Austria 12.07 23.32 4.41 1507.99 3.93
## Belgium 13.17 23.80 4.43 2108.47 3.82
## Bolivia 5.75 41.89 1.67 189.13 0.22
## Brazil 12.88 42.19 0.83 728.47 4.56
nrow(LifeCycleSavings)-nrow(Life.solo.5filas) #Diferencia de filas entre el
## [1] 45
# dataframe original
Con la tabla de datos “mpg” se usarán las funciones summarise y group_by.
se halla a cuantos carros están registrados.
mpg %>% summarise(contar=n())
## # A tibble: 1 x 1
## contar
## <int>
## 1 234
Ahora si se requiere contar la cantidad de carros por modelo(año) se usa la función group_by.
mpg %>% group_by(year) %>% summarise(contar=n())
## # A tibble: 2 x 2
## year contar
## <int> <int>
## 1 1999 117
## 2 2008 117
se presentán ahora las estadísticas generales de cilindrada por año.
mpg %>% group_by(year) %>% summarise(promedio.cilin. = mean(cyl),
median.cilin = median(cyl), std.dev.cilin = sd(cyl),
median.abs.deviation = mad(cyl), IQR.cilin = IQR(cyl))
## # A tibble: 2 x 6
## year promedio.cilin. median.cilin std.dev.cilin median.abs.deviati~ IQR.cilin
## <int> <dbl> <int> <dbl> <dbl> <dbl>
## 1 1999 5.69 6 1.55 2.97 2
## 2 2008 6.09 6 1.66 2.97 4
también se puede hallar el mínimo y máximo cilindraje por año.
mpg %>% group_by(year) %>%
summarise(min.cil = min(cyl), max.cil = max(cyl))
## # A tibble: 2 x 3
## year min.cil max.cil
## <int> <int> <int>
## 1 1999 4 8
## 2 2008 4 8
Across es una función que aplica la orden a todo el dataframe aqui vemos un uso con summarise.
mpg %>% na.omit() %>% #quita todos los NA.
group_by(model) %>% summarise(across(where(is.numeric), mean,
.names = "mean_{col}")) %>%
head()
## # A tibble: 6 x 6
## model mean_displ mean_year mean_cyl mean_cty mean_hwy
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 4runner 4wd 3.48 2002 5.67 15.2 18.8
## 2 a4 2.33 2003. 4.86 18.9 28.3
## 3 a4 quattro 2.42 2004. 5 17.1 25.8
## 4 a6 quattro 3.37 2005 6.67 16 24
## 5 altima 2.8 2005 4.67 20.7 28.7
## 6 c1500 suburban 2wd 5.52 2006. 8 12.8 17.8
Se usa summarise para contar el numero de carros que cumplan con el mismo nombre manufactura y modelo.
new.mpg = mpg %>% group_by(manufacturer, model)
Sum.mpg = summarise(new.mpg,n())
## `summarise()` has grouped output by 'manufacturer'. You can override using the `.groups` argument.
Sum.mpg
## # A tibble: 38 x 3
## # Groups: manufacturer [15]
## manufacturer model `n()`
## <chr> <chr> <int>
## 1 audi a4 7
## 2 audi a4 quattro 8
## 3 audi a6 quattro 3
## 4 chevrolet c1500 suburban 2wd 5
## 5 chevrolet corvette 5
## 6 chevrolet k1500 tahoe 4wd 4
## 7 chevrolet malibu 5
## 8 dodge caravan 2wd 11
## 9 dodge dakota pickup 4wd 9
## 10 dodge durango 4wd 7
## # ... with 28 more rows
Si solo está interesado en el total, puede usar otro pipe.
new.mpg2 = mpg %>% group_by(manufacturer, model) %>% summarise(n())
## `summarise()` has grouped output by 'manufacturer'. You can override using the `.groups` argument.
new.mpg2
## # A tibble: 38 x 3
## # Groups: manufacturer [15]
## manufacturer model `n()`
## <chr> <chr> <int>
## 1 audi a4 7
## 2 audi a4 quattro 8
## 3 audi a6 quattro 3
## 4 chevrolet c1500 suburban 2wd 5
## 5 chevrolet corvette 5
## 6 chevrolet k1500 tahoe 4wd 4
## 7 chevrolet malibu 5
## 8 dodge caravan 2wd 11
## 9 dodge dakota pickup 4wd 9
## 10 dodge durango 4wd 7
## # ... with 28 more rows
Se tiene una tabla de datos (inventada) de la contaminación del aire de 5 países en los tres años anteriores al 2021 y con la ayuda de gather se juntan todos los países en una sola columna.
año=c("2018","2019","2020")
Chile=c(14,25,34)
Brazil=c(21,41,38)
Suiza=c(10,15,9)
Dinamarca=c(54,44,28)
Turquía=c(30,21,8)
tabla1=data.frame(año,Chile,Brazil,Suiza,Dinamarca,Turquía) #antes de gather.
tabla1
## año Chile Brazil Suiza Dinamarca Turquía
## 1 2018 14 21 10 54 30
## 2 2019 25 41 15 44 21
## 3 2020 34 38 9 28 8
IQA.pais <- tabla1 %>%
gather("Chile", "Brazil", "Suiza","Dinamarca","Turquía", key = "Países",
value = "IQA")
IQA.pais
## año Países IQA
## 1 2018 Chile 14
## 2 2019 Chile 25
## 3 2020 Chile 34
## 4 2018 Brazil 21
## 5 2019 Brazil 41
## 6 2020 Brazil 38
## 7 2018 Suiza 10
## 8 2019 Suiza 15
## 9 2020 Suiza 9
## 10 2018 Dinamarca 54
## 11 2019 Dinamarca 44
## 12 2020 Dinamarca 28
## 13 2018 Turquía 30
## 14 2019 Turquía 21
## 15 2020 Turquía 8
la información está contenida en múltiples columnas, por lo tanto se usa la función spread para separar la variable sexo con respecto al puntaje.
df1= data.frame(equipos=c("rojo","rojo","azul","azul"),
sexo=c("mujer","hombre","hombre","mujer"),puntaje=c(5,7,3,9))
df1
## equipos sexo puntaje
## 1 rojo mujer 5
## 2 rojo hombre 7
## 3 azul hombre 3
## 4 azul mujer 9
df2 <- df1 %>% spread(key=sexo, value=puntaje)
df2
## equipos hombre mujer
## 1 azul 3 9
## 2 rojo 7 5
Retomando la tabla de datos creada de los goles marcados por jugadores se añade la variable fecha de nacimiento separada por guiones.
jugadores=c("Messi", "Mbappé", "Haland", "Lewandowski","Ronaldo" )
goles=c(33,32,31,41,27)
fecha.nac=c("24-06-1987","20-12-1998","21-07-2000","21-08-1988","5-02-1985")
gol.x.jugador=data.frame(jugadores,goles,fecha.nac)
gol.x.jugador
## jugadores goles fecha.nac
## 1 Messi 33 24-06-1987
## 2 Mbappé 32 20-12-1998
## 3 Haland 31 21-07-2000
## 4 Lewandowski 41 21-08-1988
## 5 Ronaldo 27 5-02-1985
Ahora se separa la fecha en tres columnas diferentes.
gol.x.jug.separ.x.fecha <- gol.x.jugador %>%
separate(fecha.nac, into = c("dia", "mes","año"), sep = "-")
gol.x.jug.separ.x.fecha
## jugadores goles dia mes año
## 1 Messi 33 24 06 1987
## 2 Mbappé 32 20 12 1998
## 3 Haland 31 21 07 2000
## 4 Lewandowski 41 21 08 1988
## 5 Ronaldo 27 5 02 1985
Para mostrar el conteo con (n) se llamará la tabla de datos new.mpg que ordena los datos mpg por manufacturador y modelo, luego se crea la fila n() que cuenta los carros que cumplen esas dos características.
m <- mutate(new.mpg, kount = n())#new variable, kount added to extreme right
m[,c(1,2,5,12)]
## # A tibble: 234 x 4
## # Groups: manufacturer, model [38]
## manufacturer model cyl kount
## <chr> <chr> <int> <int>
## 1 audi a4 4 7
## 2 audi a4 4 7
## 3 audi a4 4 7
## 4 audi a4 4 7
## 5 audi a4 6 7
## 6 audi a4 6 7
## 7 audi a4 6 7
## 8 audi a4 quattro 4 8
## 9 audi a4 quattro 4 8
## 10 audi a4 quattro 4 8
## # ... with 224 more rows
Ahora con la opción filter se tendrán en cuenta los conteos mayores estrictos a 10.
filter(new.mpg, n() > 10)
## # A tibble: 11 x 11
## # Groups: manufacturer, model [1]
## manufacturer model displ year cyl trans drv cty hwy fl class
## <chr> <chr> <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr>
## 1 dodge caravan~ 2.4 1999 4 auto(l~ f 18 24 r mini~
## 2 dodge caravan~ 3 1999 6 auto(l~ f 17 24 r mini~
## 3 dodge caravan~ 3.3 1999 6 auto(l~ f 16 22 r mini~
## 4 dodge caravan~ 3.3 1999 6 auto(l~ f 16 22 r mini~
## 5 dodge caravan~ 3.3 2008 6 auto(l~ f 17 24 r mini~
## 6 dodge caravan~ 3.3 2008 6 auto(l~ f 17 24 r mini~
## 7 dodge caravan~ 3.3 2008 6 auto(l~ f 11 17 e mini~
## 8 dodge caravan~ 3.8 1999 6 auto(l~ f 15 22 r mini~
## 9 dodge caravan~ 3.8 1999 6 auto(l~ f 15 21 r mini~
## 10 dodge caravan~ 3.8 2008 6 auto(l~ f 16 23 r mini~
## 11 dodge caravan~ 4 2008 6 auto(l~ f 16 23 r mini~
La función Nth sirve para buscar datos específicos de un vector, se toman los nombres de las variables de los datos LifeCycleSavings.
names.Life=as.vector(names(LifeCycleSavings)) # Crear vector de nombres de los
#datos LifeCycleSavings.
first(names.Life) # Primer dato del vector names.Life.
## [1] "sr"
last(names.Life) #Último dato.
## [1] "ddpi"
nth(names.Life,-3) #Tercer dato contando del último.
## [1] "pop75"
nth(names.Life,2) #Segundo dato contando del primero.
## [1] "pop15"
Se contarán la cantidad de filas de la variable manufacturer de los datos mpg, luego de la misma variable se contarán cuantos valores únicos existen en ese mismo vector.
mpg.vector= t(mpg[,1]) #se toma transpuesto para medir su largo.
length(mpg.vector) #se mide el largo del vector por columnas.
## [1] 234
n_distinct(mpg[,1]) #se cuentan los valores que son diferentes
## [1] 15
Cuando hay valores de error por cálculos matemáticos se puede reemplazar dicho error por la salida NA.
test <- c(12,25, 0, 81)
a <- 4000/test
a
## [1] 333.33333 160.00000 Inf 49.38272
b <- 20000/na_if(test,0) # si algún cero se encuentra en el vector test
b
## [1] 1666.6667 800.0000 NA 246.9136
class(b) # Muestra la que clase de vector es.
## [1] "numeric"
Se toma el vector b creado anteriormente y se reemplaza por algún valor en este caso cero.
coalesce(b,0)
## [1] 1666.6667 800.0000 0.0000 246.9136
Cuando se tiene un vector numérico se puede encontrar el orden del vector con la función row_number la cual cambia el número más bajo por 1, el siguiente por 2, así sucesivamente hasta organizar los n números.
y = c(98,4,17,4,5,3)
rank = row_number(y)
rank
## [1] 6 2 5 3 4 1
y[rank[1]] #El número más bajo del vector.
## [1] 3
y[rank[6]] #El número más alto del vector.
## [1] 98
rank2=min_rank(y)
rank2
## [1] 6 2 5 2 4 1
Dense_rank no da un rank de salida a los números repetidos para este vector, existe un valor repetido el 4 por esto el máximo rango es 5.
rank3 <- dense_rank(y)
rank3
## [1] 5 2 4 2 3 1
rank4 <- percent_rank(y)
rank4
## [1] 1.0 0.2 0.8 0.2 0.6 0.0
y <- c(98,4,17,4,5,3)
rank5 <- cume_dist(y)
rank5
## [1] 1.0000000 0.5000000 0.8333333 0.5000000 0.6666667 0.1666667
rank6 = ntile(y, 3) #se eligen 3 espacios
rank6
## [1] 3 1 3 2 2 1
Una manera más simple de leer la función de cuantiles de R.
test.vector <- c(98,4,17,4,5,3)
quantile(test.vector, prob = seq(0,1,length = 11),type = 5)
## 0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100%
## 3.0 3.1 3.7 4.0 4.0 4.5 6.2 13.4 41.3 89.9 98.0
De la tabla de datos que se viene manejando “LifeCyclingSavings”, se toma una muestra aleatoria de 5 países.
set.seed(1) #Para reproducir siempre los mismos 5 datos pseudoaleatorios.
my.sample <- sample_n(LifeCycleSavings, 5)
my.sample
## sr pop15 pop75 dpi ddpi
## Bolivia 5.75 41.89 1.67 189.13 0.22
## Sweden 6.86 21.44 4.54 3299.49 3.01
## Australia 11.43 29.35 2.87 2329.68 2.87
## Philippines 12.78 46.26 1.12 152.01 2.00
## Japan 21.10 27.01 1.91 1257.28 8.21
Dependiendo del propósito del estudio se puede pedir que la muestra tomada aleatoriamente se puedan repetir.
set.seed(2)
my.sample1 <- sample_n(LifeCycleSavings, 10, replace = TRUE)
my.sample1
## sr pop15 pop75 dpi ddpi
## Ireland 11.34 31.16 4.19 1139.95 2.99
## Germany 12.55 23.31 3.35 2457.12 3.44
## Canada...3 8.79 31.72 2.85 2982.88 2.43
## Canada...4 8.79 31.72 2.85 2982.88 2.43
## Paraguay 2.02 41.18 1.05 220.56 1.03
## China 11.90 44.75 0.67 289.52 6.51
## Guatamala...7 3.01 46.05 0.87 289.71 1.48
## New Zealand 10.67 32.61 3.17 1487.52 1.76
## Guatamala...9 3.01 46.05 0.87 289.71 1.48
## Ecuador 3.59 46.31 1.19 287.77 2.19
Para este ejemplo canadá y guatemala se repite dos veces.
Muchas veces es necesario sesgar la información para esto usamos la función weight con los datos que se “prefiere” que salgan, en este caso los carros que gastan más millas por galón en la ciudad de la tabla de datos mpg.
set.seed(3)
my.sample2 = sample_n(mpg, 12, weight = cty)
my.sample2[,c(1,2,8,11)]
## # A tibble: 12 x 4
## manufacturer model cty class
## <chr> <chr> <int> <chr>
## 1 toyota camry solara 21 compact
## 2 ford f150 pickup 4wd 14 pickup
## 3 nissan maxima 19 midsize
## 4 volkswagen jetta 19 compact
## 5 hyundai tiburon 16 subcompact
## 6 volkswagen passat 16 midsize
## 7 toyota camry solara 22 compact
## 8 subaru impreza awd 20 compact
## 9 dodge caravan 2wd 17 minivan
## 10 toyota 4runner 4wd 16 suv
## 11 chevrolet malibu 18 midsize
## 12 dodge caravan 2wd 18 minivan
Sample_frac sirve para tomar una muestra porcentual de la tabla de datos, para este ejemplo se eligió el 25% de la tabla original LifeCyclingSavings aleatoriamente.
set.seed(4)
test1 <- sample_frac(LifeCycleSavings, 0.25)
test1
## sr pop15 pop75 dpi ddpi
## Denmark 16.85 24.42 3.93 2496.53 3.99
## Belgium 13.17 23.80 4.43 2108.47 3.82
## Chile 0.60 39.74 1.34 662.86 2.67
## United States 7.56 29.81 3.43 4001.89 2.45
## Nicaragua 7.30 45.04 1.21 325.54 2.48
## Spain 11.77 27.74 2.87 768.79 4.35
## Austria 12.07 23.32 4.41 1507.99 3.93
## Korea 3.98 41.74 0.91 207.68 5.81
## Australia 11.43 29.35 2.87 2329.68 2.87
## India 9.00 41.31 0.96 88.94 1.54
## Portugal 12.49 28.96 2.85 579.51 7.48
## Norway 10.25 25.95 3.67 2231.03 3.62
Primero group_by identifica los carros por cilindraje y de estos selecciona el 7% de los grupos, esto lo hace con repetición.
set.seed(5)
agrupe.x.cilindraje = mpg %>% group_by(cyl)
agrupe.x.cilindraje
## # A tibble: 234 x 11
## # Groups: cyl [4]
## manufacturer model displ year cyl trans drv cty hwy fl class
## <chr> <chr> <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr>
## 1 audi a4 1.8 1999 4 auto~ f 18 29 p comp~
## 2 audi a4 1.8 1999 4 manu~ f 21 29 p comp~
## 3 audi a4 2 2008 4 manu~ f 20 31 p comp~
## 4 audi a4 2 2008 4 auto~ f 21 30 p comp~
## 5 audi a4 2.8 1999 6 auto~ f 16 26 p comp~
## 6 audi a4 2.8 1999 6 manu~ f 18 26 p comp~
## 7 audi a4 3.1 2008 6 auto~ f 18 27 p comp~
## 8 audi a4 quattro 1.8 1999 4 manu~ 4 18 26 p comp~
## 9 audi a4 quattro 1.8 1999 4 auto~ 4 16 25 p comp~
## 10 audi a4 quattro 2 2008 4 manu~ 4 20 28 p comp~
## # ... with 224 more rows
my.sample3 <- sample_frac(agrupe.x.cilindraje, .07, replace = TRUE)
tally y count hace conteos básicos y por grupos.
row.kount.only <- LifeCycleSavings %>% tally()
row.kount.only
## n
## 1 50
Se contarán cuantos carros hay por cilindraje con la función count.
cyl.kount <- mpg %>% count(cyl)
cyl.kount
## # A tibble: 4 x 2
## cyl n
## <int> <int>
## 1 4 81
## 2 5 4
## 3 6 79
## 4 8 70
En este caso se buscan los carros que no tienen millas por galón en común con otros carros.
cty.solo.uno <- mpg %>% add_count(cty) %>% filter(n == 1)
cty.solo.uno
## # A tibble: 3 x 12
## manufacturer model displ year cyl trans drv cty hwy fl class n
## <chr> <chr> <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr> <int>
## 1 volkswagen jetta 1.9 1999 4 manu~ f 33 44 d comp~ 1
## 2 volkswagen new ~ 1.9 1999 4 manu~ f 35 44 d subc~ 1
## 3 volkswagen new ~ 1.9 1999 4 auto~ f 29 41 d subc~ 1
Es útil para cambiar el nombre de algunas variables.
head(LifeCycleSavings)
## sr pop15 pop75 dpi ddpi
## Australia 11.43 29.35 2.87 2329.68 2.87
## Austria 12.07 23.32 4.41 1507.99 3.93
## Belgium 13.17 23.80 4.43 2108.47 3.82
## Bolivia 5.75 41.89 1.67 189.13 0.22
## Brazil 12.88 42.19 0.83 728.47 4.56
## Canada 8.79 31.72 2.85 2982.88 2.43
head(rename(LifeCycleSavings, Ahorros=sr)) #solo mostrar los primeros resultados
## Ahorros pop15 pop75 dpi ddpi
## Australia 11.43 29.35 2.87 2329.68 2.87
## Austria 12.07 23.32 4.41 1507.99 3.93
## Belgium 13.17 23.80 4.43 2108.47 3.82
## Bolivia 5.75 41.89 1.67 189.13 0.22
## Brazil 12.88 42.19 0.83 728.47 4.56
## Canada 8.79 31.72 2.85 2982.88 2.43
#y visualizar el cambio.
Se combina con mutate y es útil para crear una nueva columna con información adicional según las características del individuo.
Para este ejemplo se usarán los datos LifeCycleSavings y se pondrá una columna adicional “valoración” que representa si el crecimiento dpi es bueno malo o regular.
nueva.var.LifeCycleSavings = LifeCycleSavings %>%
mutate(Valoración=case_when(ddpi < 2~"malo", ddpi >= 2 & ddpi<= 4~ "regular",
ddpi>4~"bueno"))
head(nueva.var.LifeCycleSavings)
## sr pop15 pop75 dpi ddpi Valoración
## Australia 11.43 29.35 2.87 2329.68 2.87 regular
## Austria 12.07 23.32 4.41 1507.99 3.93 regular
## Belgium 13.17 23.80 4.43 2108.47 3.82 regular
## Bolivia 5.75 41.89 1.67 189.13 0.22 malo
## Brazil 12.88 42.19 0.83 728.47 4.56 bueno
## Canada 8.79 31.72 2.85 2982.88 2.43 regular