Simulemos
una base de hogares, donde se identifica el hogar, el sexo (1 mujer) y
provincia y edad para cada miembro.
# Definir
la lista de relaciones familiares por hogar
hogar <- c(1,1,1,1,2,2,2,3,4,4,4)
prov <- c("a","a","a","a","c","c","c","a","b","b","b")
id <- 1:length(hogar)
mujer <- c(1,0,1,1,0,0,2,0,1,0,0)
edad <- c(28,29,10,8,33,27,13,24,32,11,6)
hogar_data
<- data.frame(id, hogar, prov, mujer, edad)
hogar_data
id hogar prov mujer edad
1 1 1 a 1 28
2 2 1 a 0 29
3 3 1 a 1 10
4 4 1 a 1 8
5 5 2 c 0 33
6 6 2 c 0 27
7 7 2 c 2 13
8 8 3 a 0 24
9 9 4 b 1 32
10 10 4 b 0 11
11 11 4 b 0 6
Si
combinanos group_by con summarise, obtendríamos un collapse de la base de datos,
con la edad promedio del grupo indicado en group_by. Es decir, pasamos a tener
tantas observaciones como hogares en nuestra base de datos. Noten que en este
caso solo quedan aquellas variables a las que le hemos indicado la forma de agregación.
hogar_data
|>
group_by(hogar) |>
summarise(mean(edad))
# A tibble:
4 x 2
hogar `mean(edad)`
<dbl> <dbl>
1 1 18.8
2 2 24.3
3 3 24
4 4 16.3
Ahora,
en lugar de obtener el resumen anterior, quisiéramos agregar una variable que
indique la edad promedio por hogar. Podemos combinar group_by + mutate. Ahora
agregamos una variable con la edad promedio de cada hogar.
hogar_data
|>
group_by(hogar) |>
mutate(edad_mhogar = mean(edad))
# A tibble:
11 x 6
# Groups: hogar [4]
id hogar prov mujer edad edad_mhogar
<int> <dbl> <chr> <dbl> <dbl> <dbl>
1 1 1 a 1 28 18.8
2 2
1 a 0 29
18.8
3 3 1 a 1 10 18.8
4 4 1 a 1 8 18.8
5 5 2 c 0 33 24.3
6 6 2 c 0 27 24.3
7 7 2 c 2 13 24.3
8 8 3 a 0 24 24
9 9 4 b 1 32 16.3
10 10 4 b 0 11 16.3
11 11 4 b 0 6 16.3
Contar número
de menores de edad en cada hogar. Contar la cantidad de menores de edad en cada
hogar.
hogar_data |>
group_by(hogar) |>
mutate(num_menores = sum(edad < 18))
# A tibble: 11 x 6
# Groups: hogar [4]
id hogar prov mujer edad num_menores
<int> <dbl> <chr> <dbl> <dbl> <int>
1 1 1 a 1 28 2
2 2 1 a 0 29 2
3 3 1 a 1 10 2
4 4 1 a 1 8 2
5 5 2 c 0 33 1
6 6 2 c 0 27 1
7 7 2 c 2 13 1
8 8 3 a 0 24 0
9 9 4 b 1 32 2
10 10 4 b 0 11 2
11 11 4 b 0 6 2
Contar
el numero de menores de edad que son mujeres.
hogar_data |>
group_by(hogar) |>
mutate(num_menores = sum(edad < 18 & mujer ==1))
# A tibble: 11 x 6
# Groups: hogar [4]
id hogar prov mujer edad num_menores
<int> <dbl> <chr> <dbl> <dbl> <int>
1 1 1 a 1 28 2
2 2 1 a 0 29 2
3 3 1 a 1 10 2
4 4 1 a 1 8 2
5 5 2 c 0 33 0
6 6 2 c 0 27 0
7 7 2 c 2 13 0
8 8 3 a 0 24 0
9 9 4 b 1 32 0
10 10 4 b 0 11 0
11 11 4 b 0 6 0
hogar <- c(1,1,1,1,2,2,2,3,4,4,4)
prov <- c("a","a","a","a","c","c","c","a","b","b","b")
mujer <- c(1,0,1,1,0,0,2,0,1,0,0)
edad <- c(28,29,10,8,33,27,13,24,32,11,6)
hogar_data
id hogar prov mujer edad
1 1 1 a 1 28
2 2 1 a 0 29
3 3 1 a 1 10
4 4 1 a 1 8
5 5 2 c 0 33
6 6 2 c 0 27
7 7 2 c 2 13
8 8 3 a 0 24
9 9 4 b 1 32
10 10 4 b 0 11
11 11 4 b 0 6
group_by(hogar) |>
summarise(mean(edad))
hogar `mean(edad)`
<dbl> <dbl>
1 1 18.8
2 2 24.3
3 3 24
4 4 16.3
group_by(hogar) |>
mutate(edad_mhogar = mean(edad))
# Groups: hogar [4]
id hogar prov mujer edad edad_mhogar
<int> <dbl> <chr> <dbl> <dbl> <dbl>
1 1 1 a 1 28 18.8
3 3 1 a 1 10 18.8
4 4 1 a 1 8 18.8
5 5 2 c 0 33 24.3
6 6 2 c 0 27 24.3
7 7 2 c 2 13 24.3
8 8 3 a 0 24 24
9 9 4 b 1 32 16.3
10 10 4 b 0 11 16.3
11 11 4 b 0 6 16.3
group_by(hogar) |>
mutate(num_menores = sum(edad < 18))
# Groups: hogar [4]
id hogar prov mujer edad num_menores
<int> <dbl> <chr> <dbl> <dbl> <int>
1 1 1 a 1 28 2
2 2 1 a 0 29 2
3 3 1 a 1 10 2
4 4 1 a 1 8 2
5 5 2 c 0 33 1
6 6 2 c 0 27 1
7 7 2 c 2 13 1
8 8 3 a 0 24 0
9 9 4 b 1 32 2
10 10 4 b 0 11 2
11 11 4 b 0 6 2
group_by(hogar) |>
mutate(num_menores = sum(edad < 18 & mujer ==1))
# Groups: hogar [4]
id hogar prov mujer edad num_menores
<int> <dbl> <chr> <dbl> <dbl> <int>
1 1 1 a 1 28 2
2 2 1 a 0 29 2
3 3 1 a 1 10 2
4 4 1 a 1 8 2
5 5 2 c 0 33 0
6 6 2 c 0 27 0
7 7 2 c 2 13 0
8 8 3 a 0 24 0
9 9 4 b 1 32 0
10 10 4 b 0 11 0
11 11 4 b 0 6 0