Как подсчитать уникальные значения по группам в R (с примерами)


Вы можете использовать следующие методы для подсчета количества уникальных значений по группам в R:

Способ 1: Использование базы R

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

Способ 2: использование dplyr

library(dplyr)

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

Способ 3: Использование data.table

library (data.table)

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

Каждый метод возвращает один и тот же результат, но базовый метод R, как правило, значительно медленнее при работе с большими фреймами данных.

В следующих примерах показано, как использовать каждый из этих методов на практике со следующим фреймом данных:

#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 A 10
2 A 10
3 A 14
4 A 14
5 B 18
6 B 19
7 C 20
8 C 20
9 C 20

Метод 1: подсчет уникальных значений по группам с использованием базы R

В следующем коде показано, как подсчитать количество различных значений очков для каждой команды с использованием базы R:

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

#view results
results

 team points
1 A 2
2 B 2
3 C 1

Из вывода мы видим:

  • Для команды А существует 2 уникальных значения очков.
  • Есть 2 уникальных значения очков для команды B.
  • Для команды C существует 1 уникальное значение очков.

Метод 2: подсчет уникальных значений по группам с использованием dplyr

В следующем коде показано, как подсчитать количество различных значений очков для каждой команды с помощью 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 A 2
2 B 2
3 C 1

Обратите внимание, что эти результаты совпадают с результатами базового метода R.

Способ 3: подсчет уникальных значений по группам с использованием data.table

В следующем коде показано, как подсчитать количество различных значений баллов для каждой команды с помощью 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: A 2
2: B 2
3: C 1

Обратите внимание, что эти результаты совпадают с результатами предыдущих двух методов.

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные операции с помощью dplyr:

Как перекодировать значения с помощью dplyr
Как заменить NA на ноль в dplyr
Как ранжировать переменные по группам с помощью dplyr
Как выбрать первую строку по группе с помощью dplyr

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.