R: como usar aggregate() e não excluir linhas com na
Você pode usar a função Aggregate() em R para calcular estatísticas resumidas para variáveis em um quadro de dados.
Por padrão, se a função Aggregate() encontrar uma linha em um quadro de dados com um ou mais valores NA, ela simplesmente removerá a linha ao realizar cálculos.
Isso pode levar a consequências inesperadas ao realizar cálculos.
Para evitar esse comportamento, você pode usar o argumento na.action=NULL na função Aggregate() .
O exemplo a seguir mostra como usar esse argumento na prática.
Exemplo: Use aggegate() em R e não exclua linhas com NA
Suponha que temos o seguinte quadro de dados em R que mostra os pontos e assistências de jogadores de basquete de diferentes times:
#create data frame df <- data. frame (team=c('A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'C', 'C'), points=c(5, 9, 12, 14, 14, 13, 10, 6, 15, 18), assists=c(NA, 4, 4, 5, 3, 6, 8, 4, 10, NA)) #view data frame df team points assists 1 to 5 NA 2 to 9 4 3 to 12 4 4 to 14 5 5 A 14 3 6 B 13 6 7 B 10 8 8 B 6 4 9 C 15 10 10 C 18 NA
Agora suponha que tentamos usar a função Aggregate() para calcular a soma de pontos e assistências , agrupados por equipe :
#attempt to calculate sum of points and assists, grouped by team aggregate(. ~ team, data=df, FUN=sum, na. rm = TRUE ) team points assists 1 A 49 16 2 B 29 18 3 C 15 10
O resultado parece nos mostrar a soma de pontos e assistências por equipe, mas as linhas com valores de NA foram, na verdade, removidas ao executar esses cálculos.
Podemos confirmar isso olhando o quadro de dados original e vendo que o Time C tem dois valores na coluna de pontos :
- 15
- 18
Assim, a equipe C deveria somar 33 pontos, mas o resultado mostra apenas 15.
Isso ocorre porque a linha com um valor de pontos de 18 tem um valor de NA na coluna de assistências , o que significa que esta linha não foi realmente usada no cálculo da soma de pontos da equipe vs.
Para garantir que as linhas com valores NA não sejam removidas ao realizar cálculos, precisamos usar o argumento na.action=NULL da seguinte forma:
#calculate sum of points and assists, grouped by team (don't drop NA rows) aggregate(. ~ team, data=df, FUN=sum, na. rm = TRUE , na. action =NULL) team points assists 1 A 54 16 2 B 29 18 3 C 33 10
Observe que a função Aggregate() retorna corretamente uma soma de valores de pontos para a equipe C igual a 33 desta vez.
Nota : O argumento na.rm=TRUE especifica que os valores NA devem ser ignorados ao realizar um cálculo em uma coluna específica.
Recursos adicionais
Os tutoriais a seguir explicam como realizar outras tarefas comuns em R:
Como usar a função summary() em R
Como calcular a média por grupo em R
Como calcular estatísticas descritivas em R