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

标签 r function data.table mode

我一直在用 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/

相关文章:

r - 转置数据集

R从列表列表中删除充满NA的列表

r - 查找 R 数据帧字符串列中的最大数字

function - Lisp-在函数的多个语句中修改局部变量

function - fatal error : Call to undefined function mb_strtolower()

javascript - 如何使用 var 名称调用函数?

r - 为什么 data.table 的 order 和 setorder(v) 之间存在这种差异?

r - 当我安装 ggplot2 的开发版本时会发生什么

r - 多窗口范围计算 data.table 与 dplyr

R - 添加具有几乎相同名称的列并使用正确的列名称保存