如何根据 R 中的不同组找到 mean/median/mode?
How to find mean/median/mode based on distinctive groups in R?
我对R和编程非常陌生,所以我什至不知道如何清楚地描述我的问题,请原谅我用一个例子来进一步解释我的意思:
假设我有一个包含 2 列的数据框,第一列是 10 个不同的国家,第二列是幸福率 (0-10)。并且 country 列可以有很多重复的,例如:
栏目标题:乡村幸福
第一栏内容:A,C,A,B,B,B,C,A,D,D....
第二列内容:10,9,3,4,4,5,6,9,10,6...
我想实现的是:分别得到国家A B C D的mean/median/mode。到目前为止,使用 describe() 函数我只能获得所有数字的 MMM,而不是国家/地区。
请问有没有函数可以直接实现,还是先创建每个国家的子集?我应该怎么做?
非常感谢。
你可以用 dplyr
做到最好,但首先你必须为模式编写一个函数:
getmode <- function(v) {
uniqv <- unique(v[!is.na(v)])
uniqv[which.max(table(match(v, uniqv)))]
}
现在您可以group_by
分组变量Country
并使用summarise
计算统计数据:
library(dplyr)
df %>%
group_by(Country) %>%
summarise(Mean = mean(Happiness),
Median = median(Happiness),
Mode = getmode(Happiness))
结果:
# A tibble: 4 x 4
Country Mean Median Mode
* <chr> <dbl> <dbl> <int>
1 A 2.5 2.5 2
2 B 2 2 2
3 C 3 3 3
4 D 3.5 3.5 5
数据:
set.seed(12)
df <- data.frame(
Country = sample(LETTERS[1:4], 10, replace = T),
Happiness = sample(1:5, 10, replace = T)
)
我对R和编程非常陌生,所以我什至不知道如何清楚地描述我的问题,请原谅我用一个例子来进一步解释我的意思:
假设我有一个包含 2 列的数据框,第一列是 10 个不同的国家,第二列是幸福率 (0-10)。并且 country 列可以有很多重复的,例如:
栏目标题:乡村幸福
第一栏内容:A,C,A,B,B,B,C,A,D,D....
第二列内容:10,9,3,4,4,5,6,9,10,6...
我想实现的是:分别得到国家A B C D的mean/median/mode。到目前为止,使用 describe() 函数我只能获得所有数字的 MMM,而不是国家/地区。
请问有没有函数可以直接实现,还是先创建每个国家的子集?我应该怎么做?
非常感谢。
你可以用 dplyr
做到最好,但首先你必须为模式编写一个函数:
getmode <- function(v) {
uniqv <- unique(v[!is.na(v)])
uniqv[which.max(table(match(v, uniqv)))]
}
现在您可以group_by
分组变量Country
并使用summarise
计算统计数据:
library(dplyr)
df %>%
group_by(Country) %>%
summarise(Mean = mean(Happiness),
Median = median(Happiness),
Mode = getmode(Happiness))
结果:
# A tibble: 4 x 4
Country Mean Median Mode
* <chr> <dbl> <dbl> <int>
1 A 2.5 2.5 2
2 B 2 2 2
3 C 3 3 3
4 D 3.5 3.5 5
数据:
set.seed(12)
df <- data.frame(
Country = sample(LETTERS[1:4], 10, replace = T),
Happiness = sample(1:5, 10, replace = T)
)