在R中,mean()和median()是标准函数,它们执行您所期望的功能。Mode()告诉您对象的内部存储模式,而不是参数中出现次数最多的值。但是是否存在一个标准库函数来实现向量(或列表)的统计模式?
当前回答
计算模式大多是在有因素变量的情况下才可以使用
labels(table(HouseVotes84$V1)[as.numeric(labels(max(table(HouseVotes84$V1))))])
HouseVotes84是在“mlbench”包中可用的数据集。
它会给出最大标签值。它更容易由内置函数本身使用,而无需编写函数。
其他回答
如果你问R中的内置函数,也许你可以在软件包pracma中找到它。在这个包中,有一个叫做Mode的函数。
这建立在jprockbelly的答案上,通过对非常短的向量增加速度。这在将mode应用到data.frame或包含很多小组的数据表时非常有用:
Mode <- function(x) {
if ( length(x) <= 2 ) return(x[1])
if ( anyNA(x) ) x = x[!is.na(x)]
ux <- unique(x)
ux[which.max(tabulate(match(x, ux)))]
}
您还可以计算一个实例在您的集合中出现的次数,并找到最大次数。如。
> temp <- table(as.vector(x))
> names (temp)[temp==max(temp)]
[1] "1"
> as.data.frame(table(x))
r5050 Freq
1 0 13
2 1 15
3 2 6
>
CRAN上现在可用的折叠包中的通用函数fmode实现了基于索引哈希的基于c++的模式。它比上述任何一种方法都要快得多。它提供了向量、矩阵、data.frames和dplyr分组tibbles的方法。语法:
libary(collapse)
fmode(x, g = NULL, w = NULL, ...)
其中x可以是上述对象之一,g提供一个可选的分组向量或分组向量列表(用于分组模式计算,也在c++中执行),w(可选)提供一个数值权重向量。在分组tibble方法中,没有g参数,您可以执行data %>% group_by(idvar) %>% fmode。
我发现Ken Williams上面的帖子很棒,我添加了几行来解释NA值,并使其成为一个函数。
Mode <- function(x, na.rm = FALSE) {
if(na.rm){
x = x[!is.na(x)]
}
ux <- unique(x)
return(ux[which.max(tabulate(match(x, ux)))])
}
推荐文章
- 在geom_point中标记点
- 从线性回归中提取p值和r平方
- 在数据帧的组中为行编号
- 在scikit-learn线性回归中找到p值(显著性)
- 在R编程语言中~(波浪号)的使用
- R -降价避免包装加载消息
- 只从数据帧中选择数字列
- 为什么使用purrr::map而不是lapply?
- 如何在data.table中按名称删除列?
- 将data.frame从宽格式调整为长格式
- 计算移动平均线
- 在R中同一行打印字符串和变量内容
- 使用pandoc从Markdown转换为PDF时设置空白大小
- ggplot2折线图给出“geom_path:每组只包含一个观测值。你需要调整群体审美吗?”
- np.mean() vs np.average()在Python NumPy?