使用data.table[R]查找一组数据的众数出现次数

4
我一直在使用这里的优秀答案来查找数据表中各组的众数。但是,我还想找到变量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)))]

}

我现在使用这个代码作为基础代码,从中编写一个函数来查找众数的频率,如下所示,而不是上面我链接的答案。


好的回答。通常将答案放在问题下面而不是在问题中,你知道的。 - Frank
1
抱歉如果让您感到困惑!实际上,下面的两段代码只是找到了众数,而不是众数的频率,这就是我的答案所做的。我会编辑它,使其更加清晰。 - verybadatthis
1个回答

4

您可以为每个组创建一个频率表,其中将具有最高频率的众数(或在两个众数的情况下任意选择一个)位于顶部。然后,您可以使用以下函数和代码来找到该表的最大频率以确定模式出现的次数:

```python def get_mode_frequency(table): max_freq = max(table.values()) return max_freq
# Example usage: table = {'A': 3, 'B': 2, 'C': 3} mode_frequency = get_mode_frequency(table) print(mode_frequency) # Output: 3 ```
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倍,是因为它使用了tabulate和vectors,并且基于一种聪明的计算模式的方法,我将在主帖中链接。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接