Como selecionar a primeira linha por grupo usando dplyr
Freqüentemente, você pode querer selecionar a primeira linha de cada grupo usando o pacote dplyr em R. Você pode usar a seguinte sintaxe básica para fazer isso:
df %>% group_by (group_var) %>% arrange (values_var) %>% filter (row_number()== 1 )
O exemplo a seguir mostra como usar esta função na prática.
Exemplo: selecione a primeira linha por grupo em R
Suponha que temos o seguinte conjunto de dados em R:
#create dataset df <- data.frame(team=c('A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C', 'C' ), points=c(4, 9, 7, 7, 6, 13, 8, 8, 4, 17)) #view dataset df team points 1 to 4 2 to 9 3 to 7 4 B 7 5 B 6 6 B 13 7 C 8 8 C 8 9 C 4 10 C 17
O código a seguir mostra como usar o pacote dplyr para selecionar a primeira linha por grupo em R:
library (dplyr) df %>% group_by (team) %>% arrange (points) %>% filter (row_number()== 1 ) # A tibble: 3 x 2 # Groups: team [3] team points 1 to 4 2 C 4 3 B 6
Por padrão, organize() classifica os valores em ordem crescente, mas podemos facilmente classificar os valores em ordem decrescente:
df %>% group_by (team) %>% arrange ( desc (dots)) %>% filter (row_number()== 1 ) # A tibble: 3 x 2 # Groups: team [3] team points 1 C 17 2 B 13 3 to 9
Observe que você pode modificar facilmente este código para selecionar a enésima linha em cada grupo. Basta alterar row_number() == n .
Por exemplo, se quiser selecionar a 2ª linha por grupo, você pode usar a seguinte sintaxe:
df %>% group_by (team) %>% arrange ( desc (dots)) %>% filter (row_number()== 2 )
Ou você pode usar a seguinte sintaxe para selecionar a última linha por grupo:
df %>% group_by (team) %>% arrange ( desc (dots)) %>% filter (row_number()== n() )
Recursos adicionais
Como organizar linhas em R
Como contar observações por grupo em R
Como encontrar o valor máximo por grupo em R