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