计算模式或第二/第三/第四最常见值

时间:2016-09-01 00:55:08

标签: r function mode

当然,某些包装中必须有一个功能吗?

我已经搜索过了,我发现这个函数来计算模式:

Mode <- function(x) {
  ux <- unique(x)
  ux[which.max(tabulate(match(x, ux)))]
}

但是我想要一个能让我轻松计算一列数据中第二/第三/第四/最常见值的函数。

最终,我会将此功能应用于大量dplyr::group_by() s。

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

也许你可以试试

f <- function (x) with(rle(sort(x)), values[order(lengths, decreasing = TRUE)])

这给出了通过降低频率排序的唯一向量值。第一个是模式,第二个是第二个最常见的等等。

另一种方法是基于table()

g <- function (x) as.numeric(names(sort(table(x), decreasing = TRUE)))

但不推荐这样做,因为输入向量x将被强制首先考虑因素。如果你有一个大的矢量,这是非常慢的。退出时,我们必须提取字符名称和表格,并将其强制转换为数字。

示例

set.seed(0); x <- rpois(100, 10)
f(x)
# [1] 11 12  7  9  8 13 10 14  5 15  6  2  3 16

让我们与table中的列联表进行比较:

tab <- sort(table(x), decreasing = TRUE)
# 11 12  7  9  8 13 10 14  5 15  6  2  3 16 
# 14 14 11 11 10 10  9  7  5  4  2  1  1  1

as.numeric(names(tab))
# [1] 11 12  7  9  8 13 10 14  5 15  6  2  3 16

所以结果是一样的。