Como contar valores únicos por grupo em r (com exemplos)


Você pode usar os seguintes métodos para contar o número de valores exclusivos por grupo em R:

Método 1: Use Base R

 results <- aggregate(data=df, values_var~group_var, function (x) length ( unique (x)))

Método 2: use dplyr

 library (dplyr)

results <- df %>%
  group_by(group_var) %>%
  summarize(count = n_distinct (values_var))

Método 3: usando data.table

 library (data.table)

df <- data.table(df)
results <- df[, .(count = length ( unique (values_var))), by = group_var]

Cada método retorna exatamente o mesmo resultado, mas o método base R tende a ser significativamente mais lento ao trabalhar com grandes quadros de dados.

Os exemplos a seguir mostram como usar cada um desses métodos na prática com o seguinte quadro de dados:

 #create data frame
df <- data. frame (team=c('A', 'A', 'A', 'A', 'B', 'B', 'C', 'C', 'C'),
                 points=c(10, 10, 14, 14, 18, 19, 20, 20, 20))

#view data frame
df

  team points
1 to 10
2 to 10
3 to 14
4 to 14
5 B 18
6 B 19
7 C 20
8 C 20
9 C 20

Método 1: contar valores únicos por grupo usando Base R

O código a seguir mostra como contar o número de valores de pontos distintos para cada equipe usando a base R:

 #count unique points values by team
results <- aggregate(data=df, points~team, function (x) length ( unique (x)))

#view results
results

  team points
1 TO 2
2 B 2
3 C 1

Pelo resultado podemos ver:

  • Existem 2 valores de pontos exclusivos para o Time A.
  • Existem 2 valores de pontos exclusivos para o Time B.
  • 1 valor de ponto exclusivo para a Equipe C.

Método 2: contar valores únicos por grupo usando dplyr

O código a seguir mostra como contar o número de valores de pontos distintos para cada equipe usando dplyr:

 library (dplyr)

#count unique points values by team
results <- df %>%
  group_by(team) %>%
  summarize(count = n_distinct (points))

#view results
results

# A tibble: 3 x 2
  team count
1 TO 2
2 B 2
3 C 1

Observe que esses resultados correspondem aos do método base R.

Método 3: contar valores exclusivos por grupo usando data.table

O código a seguir mostra como contar o número de valores de pontos distintos para cada equipe usando data.table:

 library (data.table)

#convert data frame to data table
df <- data.table(df)

#count unique points values by team 
results <- df[, .(count = length ( unique (points))), by = team]

#view results
results

   team count
1 TO 2
2:B2
3: C 1

Observe que esses resultados correspondem aos dos dois métodos anteriores.

Recursos adicionais

Os tutoriais a seguir explicam como realizar outras operações comuns usando dplyr:

Como recodificar valores usando dplyr
Como substituir NA por Zero no dplyr
Como classificar variáveis por grupo 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 *