【问题标题】:Find number of occurrences of modal value for a group using data.table [R]使用 data.table [R] 查找组的模态值的出现次数
【发布时间】:2015-06-23 12:53:38
【问题描述】:

我一直在使用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)))]

}

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

【问题讨论】:

  • 很好的答案。不过,您知道,将答案放在下面而不是在问题中是标准做法。
  • 对不起,如果这令人困惑!底部的两块代码实际上只是找到模式,而不是模式的频率,这就是我的答案。我将对其进行编辑以使其更清晰。

标签: r function data.table mode


【解决方案1】:

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

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 倍,因为它使用了表格和向量,并且基于我将在主帖中链接到的一种巧妙的计算模式方法。

【讨论】:

    猜你喜欢
    • 2019-10-27
    • 2011-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-27
    • 2021-12-29
    • 1970-01-01
    相关资源
    最近更新 更多