Как подсчитать уникальные значения по группам в 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 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

Способ 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 TO 2
2 B 2
3 C 1

По результату мы видим:

  • Для команды А существует 2 уникальных значения очков.
  • Для команды Б существует 2 уникальных значения очков.
  • Для команды 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 TO 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 TO 2
2:B2
3: C 1

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

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

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *