Como agrupar por todas as colunas exceto uma no dplyr


Você pode usar a seguinte sintaxe básica para agrupar todas as colunas, exceto uma, em um quadro de dados usando o pacote dplyr em R:

 df %>%
  group_by(across(c( - this_column)))

Este exemplo específico agrupa o quadro de dados por todas as colunas, exceto aquela chamada this_column .

Observe que o sinal negativo ( ) na fórmula diz ao dplyr para excluir aquela coluna específica na função group_by() .

O exemplo a seguir mostra como usar essa sintaxe na prática.

Exemplo: agrupar por todas as colunas, exceto uma em dplyr

Suponha que temos o seguinte quadro de dados em R que contém informações sobre vários jogadores de basquete:

 #create data frame
df <- data. frame (team=c('A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'),
                 position=c('G', 'G', 'F', 'F', 'G', 'G', 'F', 'F'),
                 starter=c('Y', 'Y', 'Y', 'N', 'Y', 'N', 'N', 'N'),
                 dots=c(99, 104, 119, 113))

#view data frame
df

  team position starter points
1 AGY 99
2 AGY 104
3 AFY 119
4 AFN 113
5 BGY 99
6 BGN 104
7 BFN 119
8 BFN 113

Agora, suponha que queiramos encontrar o valor máximo na coluna de pontos , agrupado em todas as outras colunas do quadro de dados.

Podemos usar a seguinte sintaxe para fazer isso:

 library (dplyr)

#group by all columns except points column and find max points
df %>%
  group_by(across(c( - points))) %>%
  mutate(max_points = max(points))

# A tibble: 8 x 5
# Groups: team, position, starter [6]
  team position starter points max_points
                 
1 AGY 99 104
2 AGY 104 104
3 AFY 119 119
4 AFN 113 113
5 BGY 99 99
6 BGN 104 104
7 BFN 119 119
8 BFN 113 119

Pelo resultado podemos ver:

  • O valor máximo de pontos para todos os jogadores com valor de equipe A, valor de posição G e valor inicial de Y foi 104 .
  • O valor máximo de pontos para todos os jogadores com valor de equipe A, valor de posição F e valor inicial de Y foi 119 .
  • O valor máximo de pontos para todos os jogadores com valor de equipe A, valor de posição F e valor inicial de N foi 113 .

E assim por diante.

Observe que também poderíamos obter o mesmo resultado se digitássemos todos os nomes de colunas, exceto os pontos, na função group_by() :

 library (dplyr)

#group by all columns except points column and find max points
df %>%
  group_by(across(c(team, position, starter))) %>%
  mutate(max_points = max(points))

# A tibble: 8 x 5
# Groups: team, position, starter [6]
  team position starter points max_points
                 
1 AGY 99 104
2 AGY 104 104
3 AFY 119 119
4 AFN 113 113
5 BGY 99 99
6 BGN 104 104
7 BFN 119 119
8 BFN 113 119

Isso corresponde ao resultado do exemplo anterior.

No entanto, observe que é muito mais fácil excluir a coluna de pontos na função group_by() em vez de digitar os nomes de todas as outras colunas.

Recursos adicionais

Os tutoriais a seguir explicam como realizar outras tarefas comuns usando dplyr:

Como filtrar linhas contendo uma determinada string usando dplyr
Como calcular frequências relativas usando dplyr
Como selecionar a primeira linha por grupo usando dplyr

Add a Comment

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