首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >确定最小或最大优先级的模式

确定最小或最大优先级的模式
EN

Stack Overflow用户
提问于 2017-12-19 00:02:08
回答 2查看 117关注 0票数 0

我想为我的数据集计算一个模式值(除以其他因素,所以每个组都有自己的模式值,如果这有区别的话,我可能会使用dplyr )。我已经找到了this question,它讨论了一个用于定位模态值的函数。

问题是,上面所指向的代码只是返回第一个模态值,因此返回的值取决于数据集的顺序。相反,我想创建两个函数,专注于多模态分布中的最高模式和最低模式。

例如,在向量中

代码语言:javascript
运行
复制
x <- c(4.0, 1.0, 2.2, 2.2, 2.2, 4.0, 0.3, 4.0)

我希望minmode(x)返回2.2maxmode(x)返回4.0。有人能向我解释如何修改上面链接的代码(或者创建一个新函数)来这样做吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-12-19 00:19:33

基数R中的另一种方法是修改链接到的代码(digEmAll对已接受的答案的建议):

代码语言:javascript
运行
复制
Mode <- function(x) {
  ux <- unique(x)
  tab <- tabulate(match(x, ux))
  ux[tab == max(tab)]
}

这将返回所有模式,然后可以用于minmode(x)或maxmode(x):

代码语言:javascript
运行
复制
x <- c(4.0, 1.0, 2.2, 2.2, 2.2, 4.0, 0.3, 4.0)
min(Mode(x))
# [1] 2.2
max(Mode(x))
# [1] 4
票数 2
EN

Stack Overflow用户

发布于 2017-12-19 00:15:11

似乎您想要的range值是最常见的。用一种整洁的方法,我会这样处理。

代码语言:javascript
运行
复制
library(dplyr)

mode_range <- function(df, x) {

  require(dplyr, quietly = TRUE)

  var <- quo(x)

  val <- df %>%
    group_by(!!var) %>%
    summarise(n = n()) %>%
    filter(n == max(n)) %>%
    select(!!var) %>%
    unlist

  range(val)

}

df <- tibble(x = c(4.0, 1.0, 2.2, 2.2, 2.2, 4.0, 0.3, 4.0))

mode_range(df, x)[1] # min value
# [1] 2.2

mode_range(df, x)[2] # max value
# [1] 4
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47878206

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档