【问题标题】:Finding the statistical mode of a vector: When having more than single mode — return the last mode查找向量的统计模式:当有多个模式时 - 返回最后一个模式
【发布时间】:2021-11-13 20:06:56
【问题描述】:

计算向量的统计众数时,众数往往不止一种:

c(1, 1, 2, 2, 3, 4) # mode is both 1 and 2

在这种情况下,如果我想在两个(或更多)可能的值之间做出决定,我使用来自{collapse} 包的fmode(),它通过ties 参数提供了3 种可能的决定方法:

ties

一个整数或字符串,指定解决多种可能 > 模式之间联系的方法,即具有最大频率或权重总和的多个值:

Int. String Description
1 first take the first occurring mode.
2 min take the smallest of the possible modes.
3 max take the largest of the possible modes.

fmode() 的示例

library(collapse)

my_vec <- c(1, 1, 3, 4, 5, 5, -6, -6, 2, 2) # 4 modes here: 1, 2, 5, -3

fmode(my_vec, ties = "first")
#> [1] 1
fmode(my_vec, ties = "min")
#> [1] -6
fmode(my_vec, ties = "max")
#> [1] 5

我的问题

我正在寻找一种“last”方法——即,只要有多个模式,就返回“last”模式。但不幸的是,fmode() 没有"last" 方法。
所以如果我们回到我的例子,我希望向量是这样的:

my_vec <- c(1, 1, 3, 4, 5, 5, -6, -6, 2, 2)

我想要一个功能

custom_mode_func(my_vec, method = "last")
## [1] 2

【问题讨论】:

  • fmode(rev(my_vec), ties = "first") 会满足你的条件吗?
  • @DonaldSeinen,谢谢!只要我们使用dplyr 方法,它似乎与矢量对象以及分组data.frame 一起工作得很好。但是,如果我们在使用collapse 函数(即collapse::fgroup_by()collapse::fsummarise())分组时尝试此解决方案,则结果与预期不符(即错误)。我猜这是因为collapse 使用自己的分组系统,fmode() 支持,但rev() 不支持。
  • 尝试使用 dplyr group_by: data.frame(v = my_vec, g = gl(2, 5)) %&gt;% group_by(g) %&gt;% summarize(last = fmode(rev(v), ties = "first"))
  • @G.Grothendieck,是的,这很好用。

标签: r statistical-mode


【解决方案1】:

折叠的唯一选择是预先对数据进行排序,例如

library(collapse)
my_vec <- c(1, 1, 3, 4, 5, 5, -6, -6, 2, 2)
data.frame(v = my_vec, g = gl(2, 5)) %>% 
  roworder(g) %>% 
  tfm(t = data.table::rowid(g)) %>% 
  roworder(g, -t) %>% 
  gby(g) %>% 
  smr(last = fmode(v, ties = "first"))

rev不起作用的原因是因为折叠分组不会拆分数据,而只是确定一行属于哪个组,然后使用 C++ 中运行的算法同时计算所有组的统计信息(例如分组计算由fmode 自己完成)。因此,在您的代码中,rev 实际上是在分组之前执行并反转整个向量。在这种情况下,直接调用fmode.default(以优化方法分派)的本机data.table 实现可能是最快的解决方案。如果我有时间的话,我可以考虑添加一个"last" 模式。

【讨论】:

  • Last 模式是从collapse 1.7.1 开始实现的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
相关资源
最近更新 更多