Cómo utilizar una variable como parámetro de la función dplyr::slice_max() en R.
Dado un data.frame:
tibble(group = c(rep("A", 4), rep("B", 4), rep("C", 4)),
value = runif(12),
n_slice = c(rep(2, 4), rep(1, 4), rep(3, 4)) )
A tibble: 12 x 3
group value n_slice
1 A 0.853 2
2 A 0.726 2
3 A 0.783 2
4 A 0.0426 2
5 B 0.320 1
6 B 0.683 1
7 B 0.732 1
8 B 0.319 1
9 C 0.118 3
10 C 0.0259 3
11 C 0.818 3
12 C 0.635 3
Me gustaría dividir por grupo con diferentes números de filas en cada grupo.
Intenté el siguiente código pero se me notifica que “n” debe ser una constante.
re %>%
group_by(group) %>%
slice_max(value, n = n_slice)
Error: n
debe ser una constante en slice_max()
.
Resultado esperado:
r
group value n_slice
<chr> <dbl> <dbl>
1 A 0.853 2
2 A 0.783 2
3 B 0.732 1
4 C 0.818 3
5 C 0.635 3
6 C 0.118 3
davy.ai
Para rebanar un marco de datos por grupo con un número diferente de filas en cada grupo, podemos usar la función
group_map()
del paquetedplyr
junto con la funciónslice_max()
. Podemos pasar cada grupo aslice_max()
junto con el valor correspondiente den_slice
utilizando la funciónmap2()
del paquetepurrr
.Aquí está el código para obtener la salida esperada:
Salida:
En el código anterior, se utiliza
group_map()
para aplicar la funciónslice_max()
en cada grupo por separado. Devuelve una lista de marcos de datos para cada grupo. Luego, se utilizabind_rows()
para combinar la lista de marcos de datos en un solo marco de datos.