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

Add a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *