如何在r中按组计算唯一值(附示例)


您可以使用以下方法来统计R中每组唯一值的数量:

方法一:使用Base 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:使用Base 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

从结果我们可以看出:

  • A 队有2 个独特的分值。
  • B 队有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 对值重新编码
如何在 dplyr 中用零替换 NA
如何使用 dplyr 按组对变量进行排序
如何使用 dplyr 按组选择第一行

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注