如何在 r 中按组计算众数(附示例)
数据集的众数代表最常见的值。
R统计软件没有内置函数来计算数据集的众数,但您可以使用以下函数来计算众数:
find_mode <- function (x) { u <- unique(x) tab <- tabulate(match(x, u)) u[tab == max(tab)] }
以下示例展示了如何使用该函数在 R 中按组计算众数。
例1:R中按组计算众数(一种众数)
假设我们在 R 中有以下数据框,显示来自不同球队的篮球运动员的得分:
#define data frame df <- data. frame (team=c('A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'), points=c(5, 7, 7, 9, 12, 12, 10, 14)) #view data frame df team points 1 to 5 2 to 7 3 to 7 4 to 9 5 B 12 6 B 12 7 B 10 8 B 14
我们可以使用以下代码来计算按团队分组的积分众数:
library (dplyr)
#define function to calculate mode
find_mode <- function (x) {
u <- unique(x)
tab <- tabulate(match(x, u))
u[tab == max(tab)]
}
#calculate mode of 'points' by 'team'
df %>%
group_by(team) %>%
summarize(mode_points = find_mode(points))
# A tibble: 2 x 2
team mode_points
1 to 7
2 B 12
从结果我们可以看出:
- A 队的积分模式为7 。
- B 队的积分模式为12 。
示例2:R中按组计算模式(多种模式)
假设我们在 R 中有以下数据框:
#define data frame df <- data. frame (team=c('A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'), points=c(5, 7, 7, 9, 12, 12, 10, 10)) #view data frame df team points 1 to 5 2 to 7 3 to 7 4 to 9 5 B 12 6 B 12 7 B 10 8 B 10
我们可以使用以下代码来计算按团队分组的积分众数:
library (dplyr)
#define function to calculate mode
find_mode <- function (x) {
u <- unique(x)
tab <- tabulate(match(x, u))
u[tab == max(tab)]
}
#calculate mode of 'points' by 'team'
df %>%
group_by(team) %>%
summarize(mode_points = find_mode(points))
# A tibble: 3 x 2
# Groups: team [2]
team mode_points
1 to 7
2 B 12
3 B 10
从结果我们可以看出:
- A 队的积分模式为7 。
- B队的计分方式为12分和10分。
在此示例中,团队 B 出现最频繁的两个点值。因此,每个众数值都会在输出中为团队 B 在单独的行上返回。
其他资源
以下教程解释了如何在 R 中计算其他描述性统计量: