我一直在用 the excellent answer here找到具有数据表的组的模式。但是,我还想找出每组变量 y 的 x 模态值出现的次数。我怎样才能做到这一点?
编辑:找到模式的方法比上面链接的答案更快。我找不到我从中得到的答案(如果你这样做,请编辑和链接),但它使用了这个功能(如果存在多种模式,它会找到):
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)))]
}
我现在使用它作为我编写函数来查找模式频率的基本代码,如下所示,而不是我上面链接的答案。
最佳答案
您可以为每个组创建一个频率表,该表将具有最高频率的模式(或任意选择的模式之一,如果有两种)位于顶部。然后,您可以使用该表的最大频率来查找模式出现的次数,使用以下函数和代码:
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 倍,并且基于一种计算模式的巧妙方法,我将在主要文章中链接到。
关于r - 使用 data.table [R] 查找组的模态值出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29686198/