使用 data.table [R] 查找组的模态值出现次数

Find number of occurrences of modal value for a group using data.table [R]

我一直在使用 the excellent answer here 来查找具有数据 table 的组的模式。但是,我还想找出每组变量 y 的 x 模态值出现的次数。我该怎么做?

编辑:找到模式的方法比上面 linked 的答案更快。我找不到我从中得到的答案(请编辑并 link 如果你这样做了),但它使用了这个功能(并找到多种模式,如果它们存在):

 MultipleMode <- function(x) {
  ux <- unique(x)
  tab <- tabulate(match(x, ux)); ux[tab == max(tab)]
}

这里有一个版本,当有两个模式时,任意只取第一个模式:

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

}

我现在使用它作为我编写一个函数来查找模式频率的基本代码,如下所示,而不是我 link 编辑的答案以上。

您可以为每个组创建一个频率 table,其中频率最高的模式(或任意选择的一种模式,如果有两种模式)位于顶部。然后,您可以使用该 table 的最大频率来查找模式出现的次数,使用以下函数和代码:

mod_count_fun <- function(x) max(table(x))
DT[,modal_count := mod_count_fun(x),by=y]

希望对自己有帮助!

编辑: 实际上,我找到了一种更快的方法来做到这一点。相反,使用:

SingleModeVal <- function(x) {
 ux <- unique(x)
 max(tabulate(match(x, ux)))
}
DT[,modal_count := SingleModeVal(x),by=y]

这将比我之前的答案快大约 10 倍,因为它使用了表格和向量,并且基于一种聪明的计算模式的方法,我将 link 在主要 post .