R中出现的最大数量

时间:2015-05-19 14:25:43

标签: r

我有这个数组:

 [1]  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  2  1  1  1  1  1  1  1  1
  [25]  1  1  1  1  2  1  1  1  1  1  1  3  1  1  1  1  1  1  1  1  1  1  1  1
  [49]  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1
  [73]  1  1  1  1  1  4  3  2  5  3  2  3  3  2  3  2  3  2  3  3  2  3  3  2
  [97]  3  2  2  2  3  2  2  2  2  2  3  2  3  3  2  3  2  1  2  2  3  2  2  3

我需要一个只返回最大出现次数的函数。例如,如果我使用:

table(x[1:80])

我会得到:

 1  2  3  4 
74  3  2  1 

如何自动获取价值' 74'?这意味着我无法知道' 1'或者' 2'等等...是我的数组中出现的最大值。谢谢!

编辑:

我跑:

tf<- tablulate(x):

[1] 75 24 19  1  1 

并尝试运行for循环以获得&#34;最大值&#34; &#34;表格结果&#34;如下:

for (element in tf)
{
+ b= max(table(x[element]))
+ print (b)
+ }

我没有得到预期的结果,这可能很简单但不适合我。 我试过这个:

> a=max(table(C[1:75]))
[1] 72
> b=max(table(C[76:99]))
[1] 11
> c=max(table(C[100:118]))
[1] 12
> d=max(table(C[119]))
[1] 1
> e=max(table(C[120]))
[1] 1

等等。 它有效,但如果我有一个大数据集,它真的很长而且没有趣。

2 个答案:

答案 0 :(得分:4)

对于评论者的提示,如果您想要使用功能:

maximum <- function(vector, upto=length(vector)) {
  max(table(vector[1:upto]))
}

所以:

set.seed(123)
x <- sample(1:3, 100, replace=T)
maximum(x)
[1] 34

maximum(x, 55) #checking at the 55th number in the vector
[1] 19

更新

回答您编辑过的问题。使用此功能:

maxtable <- function(vector) {
  index <- cumsum(1:length(vector) %in% cumsum(tabulate(vector)))
  s <- split(vector, index)
  sapply(s, function(v) max(table(v)))
}

maxtable(x)
 0  1  2  3  4  5 
71 11 12  1  1  1

修改

我认为这个小改变更多的是你正在寻找的东西:

maxtable2 <- function(vector) {
  index <- cumsum(1:length(vector) %in% (cumsum(tabulate(vector))+1))
  s <- split(vector, index+1)
  sapply(s, function(v) max(table(v)))
}
maxtable2(x)
 1  2  3  4  5 
72 11 12  1  1 

答案 1 :(得分:0)

modeest中有一个函数可以帮助您完成调用mfv的大部分工作。但功能本身很简单,可以让自己:

> mfv
function (x, ...) 
{
    f <- factor(x)
    tf <- tabulate(f)
    return(as.numeric(levels(f)[tf == max(tf)]))
}
<environment: namespace:modeest>

所以你可以sum(x == mfv(x))得到74。