Gostaria de encontrar o próximo valor por grupo com base no próximo número ordenado. No exemplo reproduzível a seguir no grupo 2, temos duas vezes o subgrupo 1, o que significa que para ambos os valores o próximo valor deve ser do subgrupo 2, que é 4. Aqui estão alguns dados reproduzíveis (df abaixo) dput
:
> df
group subgroup value
1 1 1 9
2 1 2 8
3 1 3 7
4 2 1 8
5 2 1 6
6 2 2 4
7 2 3 2
8 3 1 2
9 3 1 3
10 3 2 7
11 3 3 9
Se tentarmos usá-lo com o próximo número de linha, obteremos, é claro, o valor errado como este:
library(dplyr)
df %>%
group_by(group) %>%
mutate(next_value = value[row_number()+1])
#> # A tibble: 11 × 4
#> # Groups: group [3]
#> group subgroup value next_value
#> <dbl> <dbl> <dbl> <dbl>
#> 1 1 1 9 8
#> 2 1 2 8 7
#> 3 1 3 7 NA
#> 4 2 1 8 6
#> 5 2 1 6 4
#> 6 2 2 4 2
#> 7 2 3 2 NA
#> 8 3 1 2 3
#> 9 3 1 3 7
#> 10 3 2 7 9
#> 11 3 3 9 NA
Minha saída desejada deve ficar assim:
group subgroup value next_value
1 1 1 9 8
2 1 2 8 7
3 1 3 7 NA
4 2 1 8 4
5 2 1 6 4
6 2 2 4 2
7 2 3 2 NA
8 3 1 2 7
9 3 1 3 7
10 3 2 7 9
11 3 3 9 NA
Criado em 24/08/2023 com reprex v2.0.2
Então, eu queria saber se alguém sabe como obter o próximo valor ordenado por grupo usando R?
dput
de df:
df <- structure(list(group = c(1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3), subgroup = c(1,
2, 3, 1, 1, 2, 3, 1, 1, 2, 3), value = c(9, 8, 7, 8, 6, 4, 2,
2, 3, 7, 9)), class = "data.frame", row.names = c(NA, -11L))
Supondo que os subgrupos estejam em ordem e contínuos a partir de 1:n, você pode fazer:
Se eles estiverem em ordem, mas não forem contínuos ou forem um fator ou caráter, você poderá fazer:
Passos: