【发布时间】: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)) %>% group_by(g) %>% summarize(last = fmode(rev(v), ties = "first")) -
@G.Grothendieck,是的,这很好用。
标签: r statistical-mode